ARM: Introduce immediate->r0.

* module/mescc/armv4/as.scm (immediate->r0): New procedure.
(armv4:local-add): Use it.
(armv4:label-mem-add): Use it.
This commit is contained in:
Danny Milosavljevic 2019-02-20 01:46:49 +01:00 committed by Jan Nieuwenhuizen
parent 7de32f00fc
commit 26b6db0bbe
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
1 changed files with 11 additions and 5 deletions

View File

@ -46,6 +46,11 @@
(n (- 0 (* 4 n))))
`(,`(,(string-append "mov____%" r ",0x32(%ebp)") (#:immediate ,n)))))
(define (immediate->r0 v)
(if (< (abs v) #x80)
`(((#: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)))))
@ -233,13 +238,14 @@
(define (armv4:local-add info n v)
(let ((n (- 0 (* 4 n))))
`(,(if (and (< (abs n) #x80)
(< (abs v) #x80)) `("add____$i32,0x32(%ebp)" (#:immediate ,n) (#:immediate ,v))
`("add____$i32,0x32(%ebp)" (#:immediate ,n) (#:immediate ,v))))))
(append (immediate->r0 v)
`(("mov____0x32(%ebp),%r1" (#:immediate ,n))
("add____%r0,%r1")
("mov____%r1,0x32(%ebp)" (#:immediate ,n))))))
(define (armv4:label-mem-add info label v)
`(,(if (< (abs v) #x80) `("add____$i8,0x32" (#:address ,label) (#:immediate1 ,v))
`("add____$i32,0x32" (#:address ,label) (#:immediate ,v)))))
(append (immediate->r0 v)
`(("add____%r0,0x32" (#:address ,label)))))
(define (armv4:nop info)
'(("nop")))