]> gitweb.factorcode.org Git - factor.git/commitdiff
arm64: ADR encoding
authorDoug Coleman <doug.coleman@gmail.com>
Fri, 17 Jun 2022 22:17:27 +0000 (17:17 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Fri, 17 Jun 2022 22:17:27 +0000 (17:17 -0500)
basis/bootstrap/assembler/arm.64.factor
basis/cpu/arm/assembler/assembler.factor
basis/cpu/arm/assembler/opcodes/opcodes.factor

index 85ee1e3b32576d349bf36f01ca537f7c21a9fc2f..bc55b9415dde6ded114b61657dad115a0d347a2c 100644 (file)
@@ -75,13 +75,13 @@ big-endian off
 
 
 ! : pic-tail-reg ( -- reg ) RBX ;
-! : return-reg ( -- reg ) RAX ;
+: return-reg ( -- reg ) X0 ;
 ! : nv-reg ( -- reg ) RBX ;
 ! : stack-reg ( -- reg ) RSP ;
 ! : frame-reg ( -- reg ) RBP ;
 ! : link-reg ( -- reg ) R11 ;
 ! : ctx-reg ( -- reg ) R12 ;
-! : vm-reg ( -- reg ) R13 ;
+: vm-reg ( -- reg ) X7 ;
 : ds-reg ( -- reg ) X5 ;
 : rs-reg ( -- reg ) X6 ;
 ! : fixnum>slot@ ( -- ) temp0 1 SAR ;
@@ -153,7 +153,10 @@ big-endian off
 : jit-jump-quot ( -- ) ;
     ! arg1 quot-entry-point-offset [+] JMP ;
 
-: jit-call-quot ( -- ) ;
+: jit-call-quot ( -- )
+    quot-entry-point-offset arg1 ADR
+    arg1 BR ;
+
     ! arg1 quot-entry-point-offset [+] CALL ;
 
 : signal-handler-save-regs ( -- regs ) { } ;
index 623e598d167871732158559635303c69fbc48180..fe9214f89e84968b85005634f2229c40fab8845d 100644 (file)
@@ -21,11 +21,11 @@ TUPLE: arm64-assembler ip labels out ;
 : ip ( -- address ) arm64-assembler get ip>> ;
 : >out ( instruction -- ) arm64-assembler get out>> push ;
 
-: ADRP ( imm Rd -- )
-    [
-        ip 12 on-bits unmask - -12 shift
-        [ 2 bits ] [ -2 shift ] bi
-    ] dip ADRP-encode >out ;
+: ADR ( imm21 Rd -- )
+    [ [ 2 bits ] [ 19 bits ] bi ] dip ADR-encode >out ;
+
+: ADRP ( imm21 Rd -- )
+    [ [ 2 bits ] [ 19 bits ] bi ] dip ADRP-encode >out ;
 
 : BL ( offset -- ) ip - 4 / BL-encode >out ;
 : BR ( register -- ) BR-encode >out ;
index b3dd0f2dc9a69644e062a0bc5a05fc96b642df1d..4d87a4a4406135344b1981112102d4f46b319aef 100644 (file)
@@ -6,7 +6,8 @@ multiline parser sequences vocabs.parser words words.symbol ;
 IN: cpu.arm.assembler.opcodes
 
 ! https://developer.arm.com/documentation/ddi0487/latest/
-! https://static.docs.arm.com/ddi0487/fb/DDI0487F_b_armv8_arm.pdf
+! https://static.docs.arm.com/ddi0487/fb/DDI0487F_b_armv8_arm.pdf ! initial work
+! https://static.docs.arm.com/ddi0487/fb/DDI0487G_a_armv8_arm.pdf ! 3/13/21
 
 <<
 SYNTAX: REGISTERS: