Fix calculation of hook instruction address.
authorTaylor R Campbell <campbell@mumble.net>
Sat, 19 Jan 2019 20:51:44 +0000 (20:51 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 21 Aug 2019 21:34:03 +0000 (21:34 +0000)
src/compiler/machines/aarch64/lapgen.scm

index a4defc611d58a0038d6843a70cd3cfe0aaa90431..3666f17aeb1c95f6e31c33df428b968acc2d3ec2 100644 (file)
@@ -581,10 +581,14 @@ USA.
 ;; Jump to an assembly hook.  No link register setup or anything.  May
 ;; clobber r16, r17.
 
+(define-integrable (hook-offset entry)
+  ;; Four instructions per hook, four bytes per instruction.
+  (* 16 entry))
+
 (define (invoke-hook entry)
   (if (zero? entry)                     ;scheme-to-interface
       (LAP (BR ,regnum:hooks))
-      (LAP (ADD X ,regnum:scratch-0 ,regnum:hooks (&U ,(* 8 entry)))
+      (LAP (ADD X ,regnum:scratch-0 ,regnum:hooks (&U ,(hook-offset entry)))
            (BR ,regnum:scratch-0))))
 
 ;; Invoke a hook that will return to the address in the link register
@@ -592,7 +596,7 @@ USA.
 ;; but are a little too large to copy in every caller.
 
 (define-integrable (invoke-hook/subroutine entry)
-  (LAP (ADD X ,regnum:scratch-0 ,regnum:hooks (&U ,(* 8 entry)))
+  (LAP (ADD X ,regnum:scratch-0 ,regnum:hooks (&U ,(hook-offset entry)))
        (BLR ,regnum:scratch-0)))
 
 ;; Invoke a hook that expects an untagged compiled return address in