From d1b7677e446ddfbea6ee45edad521985748a243a Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 13 Mar 2021 19:46:37 -0600 Subject: [PATCH] arm64: ADR encoding --- basis/bootstrap/assembler/arm.64.factor | 11 +++++++---- basis/cpu/arm/assembler/assembler.factor | 10 +++++----- basis/cpu/arm/assembler/opcodes/opcodes.factor | 3 ++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/basis/bootstrap/assembler/arm.64.factor b/basis/bootstrap/assembler/arm.64.factor index 1d5ed0b083..c5a2e5d067 100644 --- a/basis/bootstrap/assembler/arm.64.factor +++ b/basis/bootstrap/assembler/arm.64.factor @@ -5,7 +5,7 @@ compiler.constants compiler.units cpu.arm.assembler cpu.arm.assembler.opcodes generic.single.private kernel kernel.private layouts locals locals.backend math math.private memory namespaces sequences slots.private -strings.private threads.private vocabs ; +strings.private threads.private vocabs make ; IN: bootstrap.arm 8 \ cell set @@ -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 ) { } ; diff --git a/basis/cpu/arm/assembler/assembler.factor b/basis/cpu/arm/assembler/assembler.factor index 98208ac3a4..163aa3897a 100644 --- a/basis/cpu/arm/assembler/assembler.factor +++ b/basis/cpu/arm/assembler/assembler.factor @@ -20,11 +20,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 ; diff --git a/basis/cpu/arm/assembler/opcodes/opcodes.factor b/basis/cpu/arm/assembler/opcodes/opcodes.factor index b3dd0f2dc9..4d87a4a440 100644 --- a/basis/cpu/arm/assembler/opcodes/opcodes.factor +++ b/basis/cpu/arm/assembler/opcodes/opcodes.factor @@ -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: -- 2.34.1