ARM: Support negative values as immediate.

* lib/arm-mes/arm.M1 (mvn____%r0,$i8): New macro.
(mvn____%r1,$i8): New macro.
(mvn____%r7,$i8): New macro.
* module/mescc/armv4/as.scm (immediate->r0): Use it.
(armv4:value->r): Use it.
This commit is contained in:
Danny Milosavljevic 2019-04-11 19:58:08 +02:00 committed by Jan Nieuwenhuizen
parent b82a2f1fad
commit 105cf743ff
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
2 changed files with 11 additions and 2 deletions

View File

@ -95,6 +95,11 @@ DEFINE jne 1a
DEFINE mov____$i8,%r0 00a0e3
DEFINE mov____$i8,%r1 10a0e3 # mov r1, #66
DEFINE mov____$i8,%r7 70a0e3
DEFINE mvn____%r0,$i8 00e0e3
DEFINE mvn____%r1,$i8 10e0e3
DEFINE mvn____%r7,$i8 70e0e3
DEFINE mov____%r0,%r1 0010a0e1
DEFINE mov____%r0,%r2 0020a0e1
DEFINE mov____%r0,(%r1) 000081e5

View File

@ -48,12 +48,16 @@
(define (immediate->r0 v)
(if (< (abs v) #x80)
`(((#:immediate1 ,v) "mov____$i8,%r0"))
(if (< v 0)
`(((#:immediate1 ,(- -1 v)) "mvn____%r0,$i8"))
`(((#:immediate1 ,v) "mov____$i8,%r0")))
`(("mov____$i32,%r0" (#:immediate ,v)))))
(define (armv4:value->r info v)
(let ((r (get-r info)))
`(((#:immediate1 ,v) ,(string-append "mov____$i8,%" r)))))
(if (< v 0)
`(((#:immediate1 ,(- -1 v)) ,(string-append "mvn____%" r ",$i8")))
`(((#:immediate1 ,v) ,(string-append "mov____$i8,%" r))))))
(define (armv4:ret . rest)
"Note: Pretends to be on x86 a lot"