* libc/machine/rl78/setjmp.S: Convert from CPP macros to GAS

macros, to avoid dependence on the line separation character.

* rl78/crt0.S (_interrupt_vector_table): Convert from CPP macros
to GAS macros, to avoid dependence on the line separation
character.
This commit is contained in:
DJ Delorie 2012-10-03 20:24:50 +00:00
parent 13ab44c05b
commit 2b74bec6c9
4 changed files with 65 additions and 35 deletions

View File

@ -1,3 +1,9 @@
2012-10-03 DJ Delorie <dj@redhat.com>
* rl78/crt0.S (_interrupt_vector_table): Convert from CPP macros
to GAS macros, to avoid dependence on the line separation
character.
2012-10-01 DJ Delorie <dj@redhat.com> 2012-10-01 DJ Delorie <dj@redhat.com>
* v850/sbrk.c (_sbrk): Change heap_start to be an array of * v850/sbrk.c (_sbrk): Change heap_start to be an array of

View File

@ -34,7 +34,11 @@
.short _start .short _start
.section ".ivec","a" .section ".ivec","a"
#define IV(x) .weak _##x##_handler | .short _##x##_handler .macro _iv x
.weak \x
.short \x
.endm
#define IV(x) _iv _##x##_handler
#define IVx() .short 0 #define IVx() .short 0
/* To use a vector, simply define a global function named foo_handler() /* To use a vector, simply define a global function named foo_handler()

View File

@ -1,3 +1,8 @@
2012-10-03 DJ Delorie <dj@redhat.com>
* libc/machine/rl78/setjmp.S: Convert from CPP macros to GAS
macros, to avoid dependence on the line separation character.
2012-10-01 DJ Delorie <dj@redhat.com> 2012-10-01 DJ Delorie <dj@redhat.com>
* libc/sys/sysnecv850/sbrk.c (_sbrk): Change heap_start to be an * libc/sys/sysnecv850/sbrk.c (_sbrk): Change heap_start to be an

View File

@ -57,8 +57,14 @@ r23 = 0xffeef
PC 4 bytes PC 4 bytes
*/ */
#define SAVEB(ofs,reg) mov a,reg | mov [hl+ofs],a .macro _saveb ofs,reg
#define SAVE(ofs,reg) movw ax,reg | movw [hl+ofs],ax mov a,\reg
mov [hl+\ofs],a
.endm
.macro _save ofs,reg
movw ax,\reg
movw [hl+\ofs],ax
.endm
.global _setjmp .global _setjmp
.type _setjmp, @function .type _setjmp, @function
@ -72,28 +78,28 @@ _setjmp:
movw hl, ax movw hl, ax
pop ax pop ax
movw [hl], ax movw [hl], ax
SAVE (2, bc) _save 2, bc
SAVE (4, de) _save 4, de
pop ax pop ax
movw [hl+6], ax movw [hl+6], ax
SAVE (8, r8) _save 8, r8
SAVE (10, r10) _save 10, r10
SAVE (12, r12) _save 12, r12
SAVE (14, r14) _save 14, r14
SAVE (16, r16) _save 16, r16
SAVE (18, r18) _save 18, r18
SAVE (20, r20) _save 20, r20
SAVE (22, r22) _save 22, r22
;; The sp we have now includes one more pushed reg, plus $PC ;; The sp we have now includes one more pushed reg, plus $PC
movw ax, sp movw ax, sp
addw ax, #6 addw ax, #6
movw [hl+24], ax movw [hl+24], ax
SAVEB (26, es) _saveb 26, es
SAVEB (27, cs) _saveb 27, cs
SAVE (28, [sp+2]) _save 28, [sp+2]
SAVE (30, [sp+4]) _save 30, [sp+4]
clrw ax clrw ax
movw r8, ax movw r8, ax
@ -102,9 +108,18 @@ _setjmp:
.size _setjmp, . - _setjmp .size _setjmp, . - _setjmp
#define LOADB(ofs,reg) mov a,[hl+ofs] | mov reg,a .macro _loadb ofs,reg
#define LOAD(ofs,reg) movw ax,[hl+ofs] | movw reg,ax mov a,[hl+\ofs]
#define PUSH(ofs) movw ax,[hl+ofs] | push ax mov \reg,a
.endm
.macro _load ofs,reg
movw ax,[hl+\ofs]
movw \reg,ax
.endm
.macro _push ofs
movw ax,[hl+\ofs]
push ax
.endm
.global _longjmp .global _longjmp
.type _longjmp, @function .type _longjmp, @function
@ -121,24 +136,24 @@ _longjmp:
movw ax, [hl+24] movw ax, [hl+24]
movw sp, ax ; this is the *new* stack movw sp, ax ; this is the *new* stack
PUSH (30) ; high half of PC _push 30 ; high half of PC
PUSH (28) ; low half of PC _push 28 ; low half of PC
PUSH (6) ; HL _push 6 ; HL
PUSH (0) ; AX _push 0 ; AX
LOAD (2, bc) _load 2, bc
LOAD (4, de) _load 4, de
LOAD (10, r10) _load 10, r10
LOAD (12, r12) _load 12, r12
LOAD (14, r14) _load 14, r14
LOAD (16, r16) _load 16, r16
LOAD (18, r18) _load 18, r18
LOAD (20, r20) _load 20, r20
LOAD (22, r22) _load 22, r22
LOADB (26, es) _loadb 26, es
LOADB (27, cs) _loadb 27, cs
pop ax pop ax
pop hl pop hl