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:
parent
b82a2f1fad
commit
105cf743ff
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue