]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/cpu/arm/assembler/assembler.factor
cpu.arm.assembler: Use make for the relocation feature.
[factor.git] / basis / cpu / arm / assembler / assembler.factor
index 6c4a20ab8e88c018fa8122fdaddfa4fb522aaad1..0f64ea6e8214906ac1df01e489acbe82b1c5d709 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2020 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors combinators cpu.arm.assembler.opcodes io.binary
-kernel math math.bitwise namespaces sequences ;
+kernel make math math.bitwise namespaces sequences ;
 IN: cpu.arm.assembler
 
 ! pre-index mode: computed addres is the base-register + offset
@@ -20,8 +20,8 @@ TUPLE: arm64-assembler ip labels out ;
 ERROR: arm64-encoding-imm original n-bits-requested truncated ;
 : ?bits ( x n -- x ) 2dup bits dup reach = [ 2drop ] [ arm64-encoding-imm ] if ; inline
 
-: ip ( -- address ) arm64-assembler get ip>> ;
-: >out ( instruction -- ) arm64-assembler get out>> push ;
+: ip ( -- address ) arm64-assembler get ip>> ;
+: >out ( instruction -- ) 4 >le % ;
 
 : ADR ( imm21 Rd -- )
     [ [ 2 bits ] [ -2 shift 19 ?bits ] bi ] dip ADR-encode >out ;
@@ -118,7 +118,7 @@ ERROR: imm-out-of-range imm n ;
     [ 0 <arm64-assembler> \ arm64-assembler ] dip with-output-variable ; inline
 
 : assemble-arm ( quot -- bytes )
-    with-new-arm64 out>> [ 4 >le ] map concat ; inline
+    call ; inline
 
 : offset-test-arm64 ( offset quot -- instuctions )
     with-new-arm64-offset out>> ; inline
@@ -150,5 +150,7 @@ ERROR: imm-out-of-range imm n ;
 ! B but that is breakpoint
 : Br ( imm26 -- ) 26 ?bits B-encode >out ;
 : B.cond ( imm19 cond4 -- ) [ 19 ?bits ] dip B.cond-encode >out ;
-: BL ( offset -- ) ip - 4 / BL-encode >out ;
+! : BL ( offset -- ) ip - 4 / BL-encode >out ;
+: BL ( offset -- ) BL-encode >out ;
 : BR ( Rn -- ) BR-encode >out ;
+: BLR ( Rn -- ) BLR-encode >out ;