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