ARM: Fix function calls.

* lib/arm-mes/arm.M1: Delete "ret" macro.
Fix "push___%ebp" macro.
Add "pop____%lr" macro.
Add "push___%lr" macro.
Add "mov____%lr,%r9" macro.
Add "mov____%r9,%pc" macro.
* module/mescc/armv4/as.scm (armv4:function-preamble): Push lr, too.
(armv4:ret): Pop lr, too.  Return manually.
This commit is contained in:
Danny Milosavljevic 2019-02-19 13:02:47 +01:00 committed by Jan Nieuwenhuizen
parent 59f22c5b86
commit fd7c2d32cd
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
2 changed files with 13 additions and 6 deletions

View File

@ -84,6 +84,8 @@ DEFINE mov____%r0,(%r1) 000081e5
DEFINE mov____%r1,%r0 0100a0e1
DEFINE mov____%r1,%r2 0120a0e1
#DEFINE mov____%r1,0x32 xx
DEFINE mov____%lr,%r9 0e90a0e1
DEFINE mov____%r9,%pc 09f0a0e1
# fp -> r0
DEFINE mov____%r11,%r0 0b00a0e1
@ -126,6 +128,7 @@ DEFINE or_____%r1,%r0 010090e1 # orrs r0, r0, r1
DEFINE pop____%r0 04009de4
DEFINE pop____%r1 04109de4
DEFINE pop____%r3 04309de4
DEFINE pop____%lr 04e09de4
# e59f9004 ldr r9, [pc, #4] ; c <L1x>
# e52d9004 push {r9} ; (str r9, [sp, #-4]!)
@ -136,14 +139,14 @@ DEFINE pop____%r3 04309de4
DEFINE push___$i32 04909fe504902de5000000ea
DEFINE push___%r0 04002de5 # str r0, [sp, #-4]!
#DEFINE push___%ebp xx
DEFINE push___%r1 04102de5 # str r1, [sp, #-4]!
DEFINE push___%r2 04202de5 # str r2, [sp, #-4]!
DEFINE push___%r3 04302de5 # str r3, [sp, #-4]!
DEFINE push___%lr 04e02de5 # str lr, [sp, #-4]!
#DEFINE push___(%r0) xx
#DEFINE push___0x32(%ebp) xx
#DEFINE push___0x8(%ebp) xx
DEFINE ret 4770 #e1a0f00e
#DEFINE shl____$i8,%r0 xx # complicated encoding
#DEFINE shl____$i8,%r1 xx # complicated encoding
#DEFINE sub____$8,%r13 xx
@ -238,7 +241,7 @@ DEFINE SYS_getcwd b70090
DEFINE mov____%ebp,%r0 0b00a0e1
DEFINE mov____%ebp,%r1 0b10a0e1
DEFINE push___%ebp 04002de5 # str r0, [sp, #-4]!
DEFINE push___%ebp 04b02de5 # str fp, [sp, #-4]!
DEFINE pop____%ebp 04b09de4 # ldr fp, [sp], #4
DEFINE mov____%esp,%ebp 0db0a0e1 # mov fp, sp
DEFINE mov____%ebp,%esp 0bd0a0e1 # mov sp, fp

View File

@ -32,8 +32,9 @@
))
(define (armv4:function-preamble . rest)
"Note: Pretends to be on x86"
'(("push___%ebp")
"Note: Pretends to be on x86 a lot"
'(("push___%lr")
("push___%ebp")
("mov____%esp,%ebp")))
(define (armv4:function-locals . rest)
@ -50,9 +51,12 @@
`(((#:immediate1 ,v) ,(string-append "mov____$i8,%" r)))))
(define (armv4:ret . rest)
"Note: Pretends to be on x86 a lot"
'(("mov____%ebp,%esp")
("pop____%ebp")
("ret")))
("mov____%lr,%r9")
("pop____%lr")
("mov____%r9,%pc")))
(define (armv4:r-zero? info)
(let ((r (get-r info)))