 ! Copyright (C) 2020 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators combinators.extras
-cpu.arm.assembler.opcodes io.binary kernel math
-math.bitwise namespaces sequences ;
+USING: accessors combinators cpu.arm.assembler.opcodes io.binary
+kernel make math math.bitwise namespaces sequences ;
 IN: cpu.arm.assembler
 
 ! pre-index mode: computed addres is the base-register + offset

    '[ @ \ arm64-assembler get ] with-variable ; inline

: assemble-arm ( quot -- bytes )
    with-new-arm64 out>> [ 4 >le ] map concat ; inline

: offset-test-arm64 ( offset quot -- instuctions )
    with-new-arm64-offset out>> ; inline

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 -- ) 4 >le % ;

: ADR ( imm21 Rd -- )
    [ [ 2 bits ] [ -2 shift 19 ?bits ] bi ] dip ADR-encode >out ;
