[PATCH 3/3] or1k: Implement context validate and context volatile clobber functions.

Joel Sherrill joel.sherrill at oarcorp.com
Tue Sep 2 14:30:38 UTC 2014


Committed but no build.

Thanks.
On 8/31/2014 6:29 PM, Hesham ALMatary wrote:
> score/cpu/or1k: Add two new assembly functions: _CPU_Context_validate
> and _CPU_Context_volatile_clobber; their implementation follows
> corresponding ARM functions.
> ---
>  cpukit/score/cpu/or1k/Makefile.am                  |   2 +
>  cpukit/score/cpu/or1k/or1k-context-validate.S      | 186 +++++++++++++++++++++
>  .../score/cpu/or1k/or1k-context-volatile-clobber.S |  35 ++++
>  cpukit/score/cpu/or1k/preinstall.am                |   6 +-
>  4 files changed, 226 insertions(+), 3 deletions(-)
>  create mode 100644 cpukit/score/cpu/or1k/or1k-context-validate.S
>  create mode 100644 cpukit/score/cpu/or1k/or1k-context-volatile-clobber.S
>
> diff --git a/cpukit/score/cpu/or1k/Makefile.am b/cpukit/score/cpu/or1k/Makefile.am
> index cb96856..b9e00d3 100644
> --- a/cpukit/score/cpu/or1k/Makefile.am
> +++ b/cpukit/score/cpu/or1k/Makefile.am
> @@ -24,6 +24,8 @@ libscorecpu_a_SOURCES =
>  libscorecpu_a_SOURCES += cpu.c
>  libscorecpu_a_SOURCES += or1k-context-switch.S
>  libscorecpu_a_SOURCES += or1k-context-initialize.c
> +libscorecpu_a_SOURCES += or1k-context-validate.S
> +libscorecpu_a_SOURCES += or1k-context-volatile-clobber.S
>  libscorecpu_a_SOURCES += or1k-exception-default.c
>  libscorecpu_a_SOURCES += or1k-exception-frame-print.c
>  libscorecpu_a_SOURCES += or1k-exception-handler-low.S
> diff --git a/cpukit/score/cpu/or1k/or1k-context-validate.S b/cpukit/score/cpu/or1k/or1k-context-validate.S
> new file mode 100644
> index 0000000..463cc77
> --- /dev/null
> +++ b/cpukit/score/cpu/or1k/or1k-context-validate.S
> @@ -0,0 +1,186 @@
> +/*
> + * COPYRIGHT (c) 2014 Hesham ALMatary <heshamelmatary at gmail.com>
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +  #include "config.h"
> +#endif
> +
> +#include <rtems/asm.h>
> +#include <rtems/score/cpu.h>
> +
> +.section	.text
> +
> +PUBLIC(_CPU_Context_validate)
> +SYM(_CPU_Context_validate):
> +
> +  l.addi r1, r1, -140
> +  
> +  l.sw  8(r1), r2
> +  l.sw  12(r1), r3
> +  l.sw  16(r1), r4
> +  l.sw  20(r1), r5
> +  l.sw  24(r1), r6
> +  l.sw  28(r1), r7
> +  l.sw  32(r1), r8
> +  l.sw  36(r1), r9
> +  l.sw  40(r1), r10
> +  l.sw  44(r1), r11
> +  l.sw  48(r1), r12
> +  l.sw  52(r1), r13
> +  l.sw  56(r1), r14
> +  l.sw  60(r1), r15
> +  l.sw  64(r1), r16
> +  l.sw  68(r1), r17
> +  l.sw  72(r1), r18
> +  l.sw  76(r1), r19
> +  l.sw  80(r1), r20
> +  l.sw  84(r1), r21
> +  l.sw  88(r1), r22
> +  l.sw  92(r1), r23
> +  l.sw  96(r1), r24
> +  l.sw  100(r1), r25
> +  l.sw  104(r1), r26
> +  l.sw  108(r1), r27
> +  l.sw  112(r1), r28
> +  l.sw  116(r1), r29
> +  l.sw  120(r1), r30
> +  l.sw  124(r1), r31
> +  
> +  /* Fill */
> +  
> +  /* r13 is used for temporary values */
> +  l.add r13, r0, r0
> +  
> +  /* r31 contains the stack pointer */
> +  l.add r31, r1, r0
> +  
> +.macro fill_register reg
> +  l.addi	r13, r13, 1
> +  l.addi	\reg, r13, 0
> +.endm
> +  
> +  fill_register	r2
> +  fill_register	r3
> +  fill_register	r4
> +  fill_register	r5
> +  fill_register	r6
> +  fill_register	r7
> +  fill_register	r8
> +  fill_register	r9
> +  fill_register	r10
> +  fill_register	r11
> +  fill_register	r12
> +  fill_register	r13
> +  fill_register	r14
> +  fill_register	r15
> +  fill_register	r16
> +  fill_register	r17
> +  fill_register	r18
> +  fill_register	r19
> +  fill_register	r20
> +  fill_register	r21
> +  fill_register	r22
> +  fill_register	r23
> +  fill_register	r24
> +  fill_register	r25
> +  fill_register	r26
> +  fill_register	r27
> +  fill_register	r28
> +  fill_register	r29
> +  fill_register	r30
> +  fill_register	r31
> +	
> +	/* Check */
> +check:
> +
> +.macro check_register reg
> +	l.addi r13, r13, 1
> +	l.sfne \reg, r13
> +	l.bf   restore
> +	l.nop
> +.endm
> +	
> +	l.sfne r31, r1
> +	l.bf restore
> +	l.nop
> +	
> +	l.addi r13, r0, 0
> +	
> +	check_register	r2
> +	check_register	r3
> +	check_register	r4
> +	check_register	r5
> +	check_register	r6
> +	check_register	r7
> +	check_register	r8
> +	check_register	r9
> +	check_register	r10
> +  check_register	r11
> +  check_register	r12
> +  check_register	r13
> +  check_register	r14
> +  check_register	r15
> +  check_register	r16
> +  check_register	r17
> +  check_register	r18
> +  check_register	r19
> +  check_register	r20
> +	check_register	r21
> +	check_register	r22
> +	check_register	r23
> +	check_register	r24
> +	check_register	r25
> +	check_register	r26
> +	check_register	r27
> +	check_register	r28
> +	check_register	r29
> +	check_register	r30
> +	check_register	r31
> +	
> +	l.j check
> +	l.nop
> +	
> +/* Restore */
> +restore:
> +
> +  l.lwz  r2,  8(r1)
> +  l.lwz  r3,  12(r1)
> +  l.lwz  r4,  16(r1)
> +  l.lwz  r5,  20(r1)
> +  l.lwz  r6,  24(r1)
> +  l.lwz  r7,  28(r1)
> +  l.lwz  r8,  32(r1)
> +  l.lwz  r9,  36(r1)
> +  l.lwz  r10, 40(r1)
> +  l.lwz  r11, 44(r1)
> +  l.lwz  r12, 48(r1)
> +  l.lwz  r13, 52(r1)
> +  l.lwz  r14, 56(r1)
> +  l.lwz  r15, 60(r1)
> +  l.lwz  r16, 64(r1)
> +  l.lwz  r17, 68(r1)
> +  l.lwz  r18, 72(r1)
> +  l.lwz  r19, 76(r1)
> +  l.lwz  r20, 80(r1)
> +  l.lwz  r21, 84(r1)
> +  l.lwz  r22, 88(r1)
> +  l.lwz  r23, 92(r1)
> +  l.lwz  r24, 96(r1)
> +  l.lwz  r25, 100(r1)
> +  l.lwz  r26, 104(r1)
> +  l.lwz  r27, 108(r1)
> +  l.lwz  r28, 112(r1)
> +  l.lwz  r29, 116(r1)
> +  l.lwz  r30, 120(r1)
> +  l.lwz  r31, 124(r1)
> +  
> +  l.addi r1, r1, 140
> +  
> +  l.jr r9
> +  l.nop
> +	
> diff --git a/cpukit/score/cpu/or1k/or1k-context-volatile-clobber.S b/cpukit/score/cpu/or1k/or1k-context-volatile-clobber.S
> new file mode 100644
> index 0000000..304b769
> --- /dev/null
> +++ b/cpukit/score/cpu/or1k/or1k-context-volatile-clobber.S
> @@ -0,0 +1,35 @@
> +/*
> + * COPYRIGHT (c) 2014 Hesham ALMatary <heshamelmatary at gmail.com>
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +  #include "config.h"
> +#endif
> +
> +#include <rtems/asm.h>
> +
> +.section .text
> +
> +PUBLIC(_CPU_Context_volatile_clobber)
> +SYM(_CPU_Context_volatile_clobber):
> +
> +.macro clobber_register reg
> +  l.addi r0, r0, -1
> +  l.addi  \reg, r0, 0
> +.endm
> +
> +  clobber_register  r3
> +  clobber_register  r4
> +  clobber_register  r5
> +  clobber_register  r6
> +  clobber_register  r7
> +  clobber_register  r8
> +  clobber_register  r13
> +  clobber_register  r31
> +
> +  l.jr  r9
> +  l.nop
> diff --git a/cpukit/score/cpu/or1k/preinstall.am b/cpukit/score/cpu/or1k/preinstall.am
> index f4d7153..01cd68f 100644
> --- a/cpukit/score/cpu/or1k/preinstall.am
> +++ b/cpukit/score/cpu/or1k/preinstall.am
> @@ -5,14 +5,14 @@ $(srcdir)/preinstall.am: Makefile.am
>  	$(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
>  endif
>  
> -PREINSTALL_DIRS =
> -DISTCLEANFILES += $(PREINSTALL_DIRS)
> -
>  all-am: $(PREINSTALL_FILES)
>  
>  PREINSTALL_FILES =
>  CLEANFILES += $(PREINSTALL_FILES)
>  
> +PREINSTALL_DIRS =
> +DISTCLEANFILES += $(PREINSTALL_DIRS)
> +
>  $(PROJECT_INCLUDE)/rtems/$(dirstamp):
>  	@$(MKDIR_P) $(PROJECT_INCLUDE)/rtems
>  	@: > $(PROJECT_INCLUDE)/rtems/$(dirstamp)

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985



More information about the devel mailing list