summary refs log tree commit diff
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2020-12-17 10:03:05 +0000
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2020-12-31 16:50:58 +0000
commit45b1e17e9150dbd9ac2d578579063fbfa8e1b327 (patch)
tree19cb981927b471988432f5cc98a10911d528e7c3
parentf9de8bfe1a731c309b91d175b4f6f4aeb786effa (diff)
downloadglibc-45b1e17e9150dbd9ac2d578579063fbfa8e1b327.tar.gz
glibc-45b1e17e9150dbd9ac2d578579063fbfa8e1b327.tar.xz
glibc-45b1e17e9150dbd9ac2d578579063fbfa8e1b327.zip
aarch64: use PTR_ARG and SIZE_ARG instead of DELOUSE
DELOUSE was added to asm code to make them compatible with non-LP64
ABIs, but it is an unfortunate name and the code was not compatible
with ABIs where pointer and size_t are different. Glibc currently
only supports the LP64 ABI so these macros are not really needed or
tested, but for now the name is changed to be more meaningful instead
of removing them completely.

Some DELOUSE macros were dropped: clone, strlen and strnlen used it
unnecessarily.

The out of tree ILP32 patches are currently not maintained and will
likely need a rework to rebase them on top of the time64 changes.
-rw-r--r--sysdeps/aarch64/__longjmp.S2
-rw-r--r--sysdeps/aarch64/dl-tlsdesc.S6
-rw-r--r--sysdeps/aarch64/memchr.S4
-rw-r--r--sysdeps/aarch64/memcmp.S6
-rw-r--r--sysdeps/aarch64/memcpy.S12
-rw-r--r--sysdeps/aarch64/memrchr.S4
-rw-r--r--sysdeps/aarch64/memset.S4
-rw-r--r--sysdeps/aarch64/multiarch/memchr_nosimd.S4
-rw-r--r--sysdeps/aarch64/multiarch/memcpy_advsimd.S12
-rw-r--r--sysdeps/aarch64/multiarch/memcpy_falkor.S12
-rw-r--r--sysdeps/aarch64/multiarch/memcpy_thunderx.S12
-rw-r--r--sysdeps/aarch64/multiarch/memcpy_thunderx2.S12
-rw-r--r--sysdeps/aarch64/multiarch/memset_base64.S4
-rw-r--r--sysdeps/aarch64/multiarch/memset_kunpeng.S4
-rw-r--r--sysdeps/aarch64/multiarch/strlen_asimd.S2
-rw-r--r--sysdeps/aarch64/setjmp.S2
-rw-r--r--sysdeps/aarch64/strchr.S2
-rw-r--r--sysdeps/aarch64/strchrnul.S2
-rw-r--r--sysdeps/aarch64/strcmp.S4
-rw-r--r--sysdeps/aarch64/strcpy.S4
-rw-r--r--sysdeps/aarch64/strlen.S3
-rw-r--r--sysdeps/aarch64/strnlen.S5
-rw-r--r--sysdeps/aarch64/strrchr.S2
-rw-r--r--sysdeps/aarch64/sysdep.h6
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/clone.S13
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/getcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/setcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/swapcontext.S2
28 files changed, 74 insertions, 75 deletions
diff --git a/sysdeps/aarch64/__longjmp.S b/sysdeps/aarch64/__longjmp.S
index f9060776b4..601dbff483 100644
--- a/sysdeps/aarch64/__longjmp.S
+++ b/sysdeps/aarch64/__longjmp.S
@@ -46,7 +46,7 @@ ENTRY (__longjmp)
 	cfi_offset(d14, JB_D14<<3)
 	cfi_offset(d15, JB_D15<<3)
 
-	DELOUSE (0)
+	PTR_ARG (0)
 
 	ldp	x19, x20, [x0, #JB_X19<<3]
 	ldp	x21, x22, [x0, #JB_X21<<3]
diff --git a/sysdeps/aarch64/dl-tlsdesc.S b/sysdeps/aarch64/dl-tlsdesc.S
index db8a064322..1666a1dd34 100644
--- a/sysdeps/aarch64/dl-tlsdesc.S
+++ b/sysdeps/aarch64/dl-tlsdesc.S
@@ -75,7 +75,7 @@
 	.align 2
 _dl_tlsdesc_return:
 	BTI_C
-	DELOUSE (0)
+	PTR_ARG (0)
 	ldr	PTR_REG (0), [x0, #PTR_SIZE]
 	RET
 	cfi_endproc
@@ -99,7 +99,7 @@ _dl_tlsdesc_undefweak:
 	BTI_C
 	str	x1, [sp, #-16]!
 	cfi_adjust_cfa_offset (16)
-	DELOUSE (0)
+	PTR_ARG (0)
 	ldr	PTR_REG (0), [x0, #PTR_SIZE]
 	mrs	x1, tpidr_el0
 	sub	PTR_REG (0), PTR_REG (0), PTR_REG (1)
@@ -145,7 +145,7 @@ _dl_tlsdesc_undefweak:
 	.align 2
 _dl_tlsdesc_dynamic:
 	BTI_C
-	DELOUSE (0)
+	PTR_ARG (0)
 
 	/* Save just enough registers to support fast path, if we fall
 	   into slow path we will save additional registers.  */
diff --git a/sysdeps/aarch64/memchr.S b/sysdeps/aarch64/memchr.S
index 23f30f61b2..13db282bea 100644
--- a/sysdeps/aarch64/memchr.S
+++ b/sysdeps/aarch64/memchr.S
@@ -61,8 +61,8 @@
    string, counting trailing zeros identifies exactly which byte matched.  */
 
 ENTRY (MEMCHR)
-	DELOUSE (0)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (2)
 	bic	src, srcin, 15
 	cbz	cntin, L(nomatch)
 	ld1	{vdata.16b}, [src]
diff --git a/sysdeps/aarch64/memcmp.S b/sysdeps/aarch64/memcmp.S
index 827f54f99e..5176aeac8d 100644
--- a/sysdeps/aarch64/memcmp.S
+++ b/sysdeps/aarch64/memcmp.S
@@ -42,9 +42,9 @@
 #define tmp2		x8
 
 ENTRY_ALIGN (memcmp, 6)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	subs	limit, limit, 16
 	b.lo	L(less16)
diff --git a/sysdeps/aarch64/memcpy.S b/sysdeps/aarch64/memcpy.S
index e0b4c4502f..cfc1c75b41 100644
--- a/sysdeps/aarch64/memcpy.S
+++ b/sysdeps/aarch64/memcpy.S
@@ -73,9 +73,9 @@
 */
 
 ENTRY_ALIGN (MEMCPY, 6)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	add	srcend, src, count
 	add	dstend, dstin, count
@@ -209,9 +209,9 @@ END (MEMCPY)
 libc_hidden_builtin_def (MEMCPY)
 
 ENTRY_ALIGN (MEMMOVE, 4)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	add	srcend, src, count
 	add	dstend, dstin, count
diff --git a/sysdeps/aarch64/memrchr.S b/sysdeps/aarch64/memrchr.S
index c25f430970..bdd899f970 100644
--- a/sysdeps/aarch64/memrchr.S
+++ b/sysdeps/aarch64/memrchr.S
@@ -59,8 +59,8 @@
    string, counting trailing zeros identifies exactly which byte matched.  */
 
 ENTRY (__memrchr)
-	DELOUSE (0)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (2)
 	add	end, srcin, cntin
 	sub	endm1, end, 1
 	bic	src, endm1, 15
diff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S
index ac577f1660..7a472fd8a5 100644
--- a/sysdeps/aarch64/memset.S
+++ b/sysdeps/aarch64/memset.S
@@ -31,8 +31,8 @@
 
 ENTRY_ALIGN (MEMSET, 6)
 
-	DELOUSE (0)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (2)
 
 	dup	v0.16B, valw
 	add	dstend, dstin, count
diff --git a/sysdeps/aarch64/multiarch/memchr_nosimd.S b/sysdeps/aarch64/multiarch/memchr_nosimd.S
index 41ce10eb32..3045b49802 100644
--- a/sysdeps/aarch64/multiarch/memchr_nosimd.S
+++ b/sysdeps/aarch64/multiarch/memchr_nosimd.S
@@ -64,8 +64,8 @@
 
 ENTRY_ALIGN (MEMCHR, 6)
 
-	DELOUSE (0)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (2)
 
 	/* Do not dereference srcin if no bytes to compare. */
 	cbz	cntin, L(none_chr)
diff --git a/sysdeps/aarch64/multiarch/memcpy_advsimd.S b/sysdeps/aarch64/multiarch/memcpy_advsimd.S
index 48bb6d7ca4..9d39ad8f31 100644
--- a/sysdeps/aarch64/multiarch/memcpy_advsimd.S
+++ b/sysdeps/aarch64/multiarch/memcpy_advsimd.S
@@ -64,9 +64,9 @@
    from the end.  */
 
 ENTRY (__memcpy_simd)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	add	srcend, src, count
 	add	dstend, dstin, count
@@ -181,9 +181,9 @@ libc_hidden_builtin_def (__memcpy_simd)
 
 
 ENTRY (__memmove_simd)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	add	srcend, src, count
 	add	dstend, dstin, count
diff --git a/sysdeps/aarch64/multiarch/memcpy_falkor.S b/sysdeps/aarch64/multiarch/memcpy_falkor.S
index 8dfc2c759f..bebc16b466 100644
--- a/sysdeps/aarch64/multiarch/memcpy_falkor.S
+++ b/sysdeps/aarch64/multiarch/memcpy_falkor.S
@@ -73,9 +73,9 @@
 #if IS_IN (libc)
 ENTRY_ALIGN (__memcpy_falkor, 6)
 
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	cmp	count, 32
 	add	srcend, src, count
@@ -218,9 +218,9 @@ libc_hidden_builtin_def (__memcpy_falkor)
 
 ENTRY_ALIGN (__memmove_falkor, 6)
 
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	cmp	count, 32
 	add	srcend, src, count
diff --git a/sysdeps/aarch64/multiarch/memcpy_thunderx.S b/sysdeps/aarch64/multiarch/memcpy_thunderx.S
index e9407571b5..c04b17346b 100644
--- a/sysdeps/aarch64/multiarch/memcpy_thunderx.S
+++ b/sysdeps/aarch64/multiarch/memcpy_thunderx.S
@@ -81,9 +81,9 @@
 
 ENTRY_ALIGN (MEMMOVE, 6)
 
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	sub	tmp1, dstin, src
 	cmp	count, 96
@@ -95,9 +95,9 @@ END (MEMMOVE)
 libc_hidden_builtin_def (MEMMOVE)
 ENTRY (MEMCPY)
 
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	prfm	PLDL1KEEP, [src]
 	add	srcend, src, count
diff --git a/sysdeps/aarch64/multiarch/memcpy_thunderx2.S b/sysdeps/aarch64/multiarch/memcpy_thunderx2.S
index 68e99455c8..0096c4ce6f 100644
--- a/sysdeps/aarch64/multiarch/memcpy_thunderx2.S
+++ b/sysdeps/aarch64/multiarch/memcpy_thunderx2.S
@@ -97,9 +97,9 @@
 
 ENTRY_ALIGN (MEMMOVE, 6)
 
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	add	srcend, src, count
 	cmp	count, 16
@@ -127,9 +127,9 @@ libc_hidden_builtin_def (MEMMOVE)
 	.p2align 4
 ENTRY (MEMCPY)
 
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	SIZE_ARG (2)
 
 	add	srcend, src, count
 	cmp	count, 16
diff --git a/sysdeps/aarch64/multiarch/memset_base64.S b/sysdeps/aarch64/multiarch/memset_base64.S
index 8f85cd1caf..aac05be308 100644
--- a/sysdeps/aarch64/multiarch/memset_base64.S
+++ b/sysdeps/aarch64/multiarch/memset_base64.S
@@ -36,8 +36,8 @@
 
 ENTRY_ALIGN (MEMSET, 6)
 
-	DELOUSE (0)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (2)
 
 	bfi	valw, valw, 8, 8
 	bfi	valw, valw, 16, 16
diff --git a/sysdeps/aarch64/multiarch/memset_kunpeng.S b/sysdeps/aarch64/multiarch/memset_kunpeng.S
index 8e051d4fd1..793a659b48 100644
--- a/sysdeps/aarch64/multiarch/memset_kunpeng.S
+++ b/sysdeps/aarch64/multiarch/memset_kunpeng.S
@@ -31,8 +31,8 @@
 
 ENTRY_ALIGN (MEMSET, 6)
 
-	DELOUSE (0)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (2)
 
 	dup	v0.16B, valw
 	add	dstend, dstin, count
diff --git a/sysdeps/aarch64/multiarch/strlen_asimd.S b/sysdeps/aarch64/multiarch/strlen_asimd.S
index bc5a4eaf77..154a28811e 100644
--- a/sysdeps/aarch64/multiarch/strlen_asimd.S
+++ b/sysdeps/aarch64/multiarch/strlen_asimd.S
@@ -86,7 +86,7 @@
    character, return the length, if not, continue in the main loop.  */
 
 ENTRY (__strlen_asimd)
-        DELOUSE (0)
+	PTR_ARG (0)
 
 	and	tmp1, srcin, MIN_PAGE_SIZE - 1
 	cmp	tmp1, MIN_PAGE_SIZE - 32
diff --git a/sysdeps/aarch64/setjmp.S b/sysdeps/aarch64/setjmp.S
index 28fdd3f46a..57e5982cf7 100644
--- a/sysdeps/aarch64/setjmp.S
+++ b/sysdeps/aarch64/setjmp.S
@@ -33,7 +33,7 @@ END (_setjmp)
 libc_hidden_def (_setjmp)
 
 ENTRY (__sigsetjmp)
-	DELOUSE (0)
+	PTR_ARG (0)
 
 1:
 	stp	x19, x20, [x0, #JB_X19<<3]
diff --git a/sysdeps/aarch64/strchr.S b/sysdeps/aarch64/strchr.S
index fd1b941666..5d21ca7938 100644
--- a/sysdeps/aarch64/strchr.S
+++ b/sysdeps/aarch64/strchr.S
@@ -56,7 +56,7 @@
    string, counting trailing zeros identifies exactly which byte matched.  */
 
 ENTRY (strchr)
-	DELOUSE (0)
+	PTR_ARG (0)
 	bic	src, srcin, 15
 	dup	vrepchr.16b, chrin
 	ld1	{vdata.16b}, [src]
diff --git a/sysdeps/aarch64/strchrnul.S b/sysdeps/aarch64/strchrnul.S
index 1ae4598f82..cc9d2b9bbb 100644
--- a/sysdeps/aarch64/strchrnul.S
+++ b/sysdeps/aarch64/strchrnul.S
@@ -54,7 +54,7 @@
    string, counting trailing zeros identifies exactly which byte matched.  */
 
 ENTRY (__strchrnul)
-	DELOUSE (0)
+	PTR_ARG (0)
 	bic	src, srcin, 15
 	dup	vrepchr.16b, chrin
 	ld1	{vdata.16b}, [src]
diff --git a/sysdeps/aarch64/strcmp.S b/sysdeps/aarch64/strcmp.S
index 77d7218dea..63b8390b4a 100644
--- a/sysdeps/aarch64/strcmp.S
+++ b/sysdeps/aarch64/strcmp.S
@@ -62,8 +62,8 @@
    NUL too in big-endian, byte-reverse the data before the NUL check.  */
 
 ENTRY(strcmp)
-	DELOUSE (0)
-	DELOUSE (1)
+	PTR_ARG (0)
+	PTR_ARG (1)
 	sub	off2, src2, src1
 	mov	zeroones, REP8_01
 	and	tmp, src1, 7
diff --git a/sysdeps/aarch64/strcpy.S b/sysdeps/aarch64/strcpy.S
index 80b16a0931..2926b6d2d7 100644
--- a/sysdeps/aarch64/strcpy.S
+++ b/sysdeps/aarch64/strcpy.S
@@ -73,8 +73,8 @@
    string, counting trailing zeros identifies exactly which byte matched.  */
 
 ENTRY (STRCPY)
-	DELOUSE (0)
-	DELOUSE (1)
+	PTR_ARG (0)
+	PTR_ARG (1)
 	bic	src, srcin, 15
 	mov	wtmp, 0xf00f
 	ld1	{vdata.16b}, [src]
diff --git a/sysdeps/aarch64/strlen.S b/sysdeps/aarch64/strlen.S
index e314fffed6..a4a30928ee 100644
--- a/sysdeps/aarch64/strlen.S
+++ b/sysdeps/aarch64/strlen.S
@@ -54,8 +54,7 @@
    string, counting trailing zeros identifies exactly which byte matched.  */
 
 ENTRY (STRLEN)
-	DELOUSE (0)
-	DELOUSE (1)
+	PTR_ARG (0)
 	bic	src, srcin, 15
 	mov	wtmp, 0xf00f
 	ld1	{vdata.16b}, [src]
diff --git a/sysdeps/aarch64/strnlen.S b/sysdeps/aarch64/strnlen.S
index 086a5c7e99..5699105e95 100644
--- a/sysdeps/aarch64/strnlen.S
+++ b/sysdeps/aarch64/strnlen.S
@@ -55,9 +55,8 @@
 #define REP8_80 0x8080808080808080
 
 ENTRY_ALIGN_AND_PAD (__strnlen, 6, 9)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
+	PTR_ARG (0)
+	SIZE_ARG (1)
 	cbz	limit, L(hit_limit)
 	mov	zeroones, #REP8_01
 	bic	src, srcin, #15
diff --git a/sysdeps/aarch64/strrchr.S b/sysdeps/aarch64/strrchr.S
index a9b2bf47c2..878fa16b21 100644
--- a/sysdeps/aarch64/strrchr.S
+++ b/sysdeps/aarch64/strrchr.S
@@ -59,7 +59,7 @@
    if the relevant byte matched the NUL end of string.  */
 
 ENTRY(strrchr)
-	DELOUSE (0)
+	PTR_ARG (0)
 	bic	src, srcin, 15
 	dup	vrepchr.16b, chrin
 	mov	wtmp, 0x3003
diff --git a/sysdeps/aarch64/sysdep.h b/sysdeps/aarch64/sysdep.h
index 2d802db008..e3e2f5f44d 100644
--- a/sysdeps/aarch64/sysdep.h
+++ b/sysdeps/aarch64/sysdep.h
@@ -25,12 +25,14 @@
 # define AARCH64_R(NAME)	R_AARCH64_ ## NAME
 # define PTR_REG(n)		x##n
 # define PTR_LOG_SIZE		3
-# define DELOUSE(n)
+# define PTR_ARG(n)
+# define SIZE_ARG(n)
 #else
 # define AARCH64_R(NAME)	R_AARCH64_P32_ ## NAME
 # define PTR_REG(n)		w##n
 # define PTR_LOG_SIZE		2
-# define DELOUSE(n)		mov     w##n, w##n
+# define PTR_ARG(n)		mov     w##n, w##n
+# define SIZE_ARG(n)		mov     w##n, w##n
 #endif
 
 #define PTR_SIZE	(1<<PTR_LOG_SIZE)
diff --git a/sysdeps/unix/sysv/linux/aarch64/clone.S b/sysdeps/unix/sysv/linux/aarch64/clone.S
index 2b14106fd1..802b238ab9 100644
--- a/sysdeps/unix/sysv/linux/aarch64/clone.S
+++ b/sysdeps/unix/sysv/linux/aarch64/clone.S
@@ -33,13 +33,12 @@
  */
         .text
 ENTRY(__clone)
-	DELOUSE (0)
-	DELOUSE (1)
-	DELOUSE (2)
-	DELOUSE (3)
-	DELOUSE (4)
-	DELOUSE (5)
-	DELOUSE (6)
+	PTR_ARG (0)
+	PTR_ARG (1)
+	PTR_ARG (3)
+	PTR_ARG (4)
+	PTR_ARG (5)
+	PTR_ARG (6)
 	/* Save args for the child.  */
 	mov	x10, x0
 	mov	x11, x2
diff --git a/sysdeps/unix/sysv/linux/aarch64/getcontext.S b/sysdeps/unix/sysv/linux/aarch64/getcontext.S
index 8571556189..1fe119a757 100644
--- a/sysdeps/unix/sysv/linux/aarch64/getcontext.S
+++ b/sysdeps/unix/sysv/linux/aarch64/getcontext.S
@@ -30,7 +30,7 @@
 	.text
 
 ENTRY(__getcontext)
-	DELOUSE (0)
+	PTR_ARG (0)
 	/* The saved context will return to the getcontext() call point
 	   with a return value of 0 */
 	str	xzr,	  [x0, oX0 +  0 * SZREG]
diff --git a/sysdeps/unix/sysv/linux/aarch64/setcontext.S b/sysdeps/unix/sysv/linux/aarch64/setcontext.S
index 61fb813db3..01b9981ec8 100644
--- a/sysdeps/unix/sysv/linux/aarch64/setcontext.S
+++ b/sysdeps/unix/sysv/linux/aarch64/setcontext.S
@@ -34,7 +34,7 @@
 	.text
 
 ENTRY (__setcontext)
-	DELOUSE (0)
+	PTR_ARG (0)
 	/* Save a copy of UCP.  */
 	mov	x9, x0
 
diff --git a/sysdeps/unix/sysv/linux/aarch64/swapcontext.S b/sysdeps/unix/sysv/linux/aarch64/swapcontext.S
index f8c66f0ef0..2c1a4af855 100644
--- a/sysdeps/unix/sysv/linux/aarch64/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/aarch64/swapcontext.S
@@ -27,7 +27,7 @@
 
 	.text
 ENTRY(__swapcontext)
-	DELOUSE (0)
+	PTR_ARG (0)
 	/* Set the value returned when swapcontext() returns in this context.
 	   And set up x1 to become the return address of the caller, so we
 	   can return there with a normal RET instead of an indirect jump.  */