summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-06-21 15:01:45 +0200
committerLudovic Courtès <ludo@gnu.org>2020-06-21 15:04:32 +0200
commit7e814190e32ae9dc0b230a23f3b35f70030fc4d6 (patch)
tree4b1489ebe6f964b5fb2af52b50d90a2ddb15f7ed
parent5f22d1090bef72639f2744402c0466d8dbf8f8ac (diff)
parent24ef197b1269f8371b1f4a412caa6d2b99d66839 (diff)
downloadguile-7e814190e32ae9dc0b230a23f3b35f70030fc4d6.tar.gz
Merge upstream 'lightening'
* libguile/lightening: Merge from https://gitlab.com/wingo/lightening, commit 24ef197b1269f8371b1f4a412caa6d2b99d66839.
-rw-r--r--libguile/lightening/lightening/arm-cpu.c2
-rw-r--r--libguile/lightening/tests/Makefile8
-rw-r--r--libguile/lightening/tests/movi.c22
3 files changed, 27 insertions, 5 deletions
diff --git a/libguile/lightening/lightening/arm-cpu.c b/libguile/lightening/lightening/arm-cpu.c
index 4445266af..2b4eecc29 100644
--- a/libguile/lightening/lightening/arm-cpu.c
+++ b/libguile/lightening/lightening/arm-cpu.c
@@ -230,7 +230,7 @@ encode_thumb_immediate(unsigned int v)
return ((v & 0xff) | (1 << 12));
/* abcdefgh 00000000 abcdefgh 00000000 */
if (((v & 0xffff0000) >> 16) == (v & 0xffff) && (v & 0xff) == 0)
- return ((v & 0x000000ff) | (2 << 12));
+ return (((v & 0x0000ff00) >> 8) | (2 << 12));
/* abcdefgh abcdefgh abcdefgh abcdefgh */
if ( (v & 0xff) == ((v & 0xff00) >> 8) &&
((v & 0xff00) >> 8) == ((v & 0xff0000) >> 16) &&
diff --git a/libguile/lightening/tests/Makefile b/libguile/lightening/tests/Makefile
index 81279720d..769b43423 100644
--- a/libguile/lightening/tests/Makefile
+++ b/libguile/lightening/tests/Makefile
@@ -1,5 +1,5 @@
TESTS=$(sort $(basename $(wildcard *.c)))
-TARGETS=native ia32 aarch64 armv7
+TARGETS ?= native ia32 aarch64 armv7
# Suitable values of cross-compiler variables for Debian:
#
@@ -17,9 +17,9 @@ TARGETS=native ia32 aarch64 armv7
# gcc-aarch64-linux-gnu libc6-dev-arm64-cross libc6:arm64
#
CC = gcc
-CC_IA32=guix environment --pure -s i686-linux --ad-hoc gcc-toolchain glibc -- gcc
-CC_AARCH64=guix environment --pure -s aarch64-linux --ad-hoc gcc-toolchain glibc -- gcc
-CC_ARMv7=guix environment --pure -s armhf-linux --ad-hoc gcc-toolchain glibc -- gcc
+CC_IA32=guix environment --pure -s i686-linux --ad-hoc gcc-toolchain -- gcc
+CC_AARCH64=guix environment --pure -s aarch64-linux --ad-hoc gcc-toolchain -- gcc
+CC_ARMv7=guix environment --pure -s armhf-linux --ad-hoc gcc-toolchain -- gcc
CFLAGS = -Wall -O0 -g
all: $(foreach TARGET,$(TARGETS),$(addprefix test-$(TARGET)-,$(TESTS)))
diff --git a/libguile/lightening/tests/movi.c b/libguile/lightening/tests/movi.c
new file mode 100644
index 000000000..fcdd656c0
--- /dev/null
+++ b/libguile/lightening/tests/movi.c
@@ -0,0 +1,22 @@
+#include "test.h"
+
+static void
+run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
+{
+ jit_begin(j, arena_base, arena_size);
+ size_t align = jit_enter_jit_abi(j, 0, 0, 0);
+
+ jit_movi(j, JIT_R0, 0xa500a500);
+ jit_leave_jit_abi(j, 0, 0, align);
+ jit_retr(j, JIT_R0);
+
+ jit_uword_t (*f)(void) = jit_end(j, NULL);
+
+ ASSERT(f() == 0xa500a500);
+}
+
+int
+main (int argc, char *argv[])
+{
+ return main_helper(argc, argv, run_test);
+}