From b6ea8ca3e9fc74bb156daba767e18c420608b997 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Philipp=20Matthias=20Sch=C3=A4fer?= Date: Mon, 20 Jan 2014 22:00:32 +0100 Subject: [PATCH] src/compiler/arm/sap: split POINTER+-C into POINTER+-UNSIGNED-C and POINTER+-SIGNED-C the reason is, that ARM does not like negative immediates --- src/compiler/arm/sap.lisp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/compiler/arm/sap.lisp b/src/compiler/arm/sap.lisp index ee681e480..ec4ea9393 100644 --- a/src/compiler/arm/sap.lisp +++ b/src/compiler/arm/sap.lisp @@ -112,17 +112,28 @@ (:generator 2 (inst add res ptr offset))) -(define-vop (pointer+-c) +(define-vop (pointer+-unsigned-c) (:translate sap+) (:args (ptr :scs (sap-reg))) (:info offset) - (:arg-types system-area-pointer (:constant (signed-byte 8))) + (:arg-types system-area-pointer (:constant (unsigned-byte 8))) (:results (res :scs (sap-reg))) (:result-types system-area-pointer) (:policy :fast-safe) (:generator 1 (inst add res ptr offset))) +(define-vop (pointer+-signed-c) + (:translate sap+) + (:args (ptr :scs (sap-reg))) + (:info offset) + (:arg-types system-area-pointer (:constant (integer -255 -1))) + (:results (res :scs (sap-reg))) + (:result-types system-area-pointer) + (:policy :fast-safe) + (:generator 1 + (inst sub res ptr (- offset)))) + (define-vop (pointer-) (:translate sap-) (:args (ptr1 :scs (sap-reg)) -- 2.11.4.GIT