diff --git a/src/cmd/asm/internal/asm/parse.go b/src/cmd/asm/internal/asm/parse.go
index 16133269066e51fd3bb2ff4c4798040d03826d80..73c0af2e3095c9664ad8f4382ff4a5020d1920d5 100644
--- a/src/cmd/asm/internal/asm/parse.go
+++ b/src/cmd/asm/internal/asm/parse.go
@@ -546,6 +546,10 @@ func (p *Parser) registerIndirect(a *obj.Addr, prefix rune) {
 			p.errorf("cannot use pseudo-register in pair")
 			return
 		}
+		// For SB, SP, and FP, there must be a name here. 0(FP) is not legal.
+		if name != "PC" && a.Name == obj.NAME_NONE {
+			p.errorf("cannot reference %s without a symbol", name)
+		}
 		p.setPseudoRegister(a, name, false, prefix)
 		return
 	}
diff --git a/src/crypto/md5/md5block_arm.s b/src/crypto/md5/md5block_arm.s
index 7c8691efb230acba78288c7c37f33664d2e82107..b2bd04e0869c1f513def3dd99928c21a3f0086cd 100644
--- a/src/crypto/md5/md5block_arm.s
+++ b/src/crypto/md5/md5block_arm.s
@@ -29,31 +29,31 @@
 //12(FP) is p.cap
 //
 // Stack frame
-#define p_end	-4	// -4(SP) pointer to the end of data
-#define p_data	-8	// -8(SP) current data pointer
-#define buf	(-8-4*16)	//-72(SP) 16 words temporary buffer
+#define p_end	-4	// -4(R13==SP) pointer to the end of data
+#define p_data	-8	// -8(R13) current data pointer
+#define buf	(-8-4*16)	//-72(R13) 16 words temporary buffer
 		// 3 words at 4..12(R13) for called routine parameters
 
 TEXT	路block(SB), NOSPLIT, $84-16
 	MOVW	p+4(FP), Rdata	// pointer to the data
 	MOVW	p_len+8(FP), Rt0	// number of bytes
 	ADD	Rdata, Rt0
-	MOVW	Rt0, p_end(SP)	// pointer to end of data
+	MOVW	Rt0, p_end(R13)	// pointer to end of data
 
 loop:
-	MOVW	Rdata, p_data(SP)	// Save Rdata
+	MOVW	Rdata, p_data(R13)	// Save Rdata
 	AND.S	$3, Rdata, Rt0	// TST $3, Rdata not working see issue 5921
 	BEQ	aligned			// aligned detected - skip copy
 
 	// Copy the unaligned source data into the aligned temporary buffer
 	// memove(to=4(R13), from=8(R13), n=12(R13)) - Corrupts all registers
-	MOVW	$buf(SP), Rtable	// to
+	MOVW	$buf(R13), Rtable	// to
 	MOVW	$64, Rc0		// n
 	MOVM.IB	[Rtable,Rdata,Rc0], (R13)
 	BL	runtime路memmove(SB)
 
 	// Point to the local aligned copy of the data
-	MOVW	$buf(SP), Rdata
+	MOVW	$buf(R13), Rdata
 
 aligned:
 	// Point to the table of constants
@@ -217,8 +217,8 @@ aligned:
 
 	MOVM.IA [Ra,Rb,Rc,Rd], (Rt0)
 
-	MOVW	p_data(SP), Rdata
-	MOVW	p_end(SP), Rt0
+	MOVW	p_data(R13), Rdata
+	MOVW	p_end(R13), Rt0
 	ADD	$64, Rdata
 	CMP	Rt0, Rdata
 	BLO	loop
diff --git a/src/crypto/rc4/rc4_arm.s b/src/crypto/rc4/rc4_arm.s
index b4b807ad80a5ee6e3daced24f3ebf775fd1d99d5..05e94cbcf2cbe2dd2d556e48ec52d50be81d3423 100644
--- a/src/crypto/rc4/rc4_arm.s
+++ b/src/crypto/rc4/rc4_arm.s
@@ -21,12 +21,12 @@
 
 // func xorKeyStream(dst, src *byte, n int, state *[256]byte, i, j *uint8)
 TEXT 路xorKeyStream(SB),NOSPLIT,$0
-	MOVW 0(FP), Rdst
-	MOVW 4(FP), Rsrc
-	MOVW 8(FP), Rn
-	MOVW 12(FP), Rstate
-	MOVW 16(FP), Rpi
-	MOVW 20(FP), Rpj
+	MOVW dst+0(FP), Rdst
+	MOVW src+4(FP), Rsrc
+	MOVW n+8(FP), Rn
+	MOVW state+12(FP), Rstate
+	MOVW pi+16(FP), Rpi
+	MOVW pj+20(FP), Rpj
 	MOVBU (Rpi), Ri
 	MOVBU (Rpj), Rj
 	MOVW $0, Rk
diff --git a/src/crypto/sha1/sha1block_arm.s b/src/crypto/sha1/sha1block_arm.s
index 2cc0e09914b433393b7dc9060fad490ca3fb3d52..ef0ff5d242dfd41442056f293eeec1abc91d089b 100644
--- a/src/crypto/sha1/sha1block_arm.s
+++ b/src/crypto/sha1/sha1block_arm.s
@@ -141,7 +141,7 @@ TEXT	路block(SB), 0, $352-16
 	MOVW	p+4(FP), Rdata	// pointer to the data
 	MOVW	p_len+8(FP), Rt0	// number of bytes
 	ADD	Rdata, Rt0
-	MOVW	Rt0, p_end(SP)	// pointer to end of data
+	MOVW	Rt0, p_end(R13)	// pointer to end of data
 
 	// Load up initial SHA1 accumulator
 	MOVW	dig+0(FP), Rt0
@@ -151,7 +151,7 @@ loop:
 	// Save registers at SP+4 onwards
 	MOVM.IB [Ra,Rb,Rc,Rd,Re], (R13)
 
-	MOVW	$w_buf(SP), Rw
+	MOVW	$w_buf(R13), Rw
 	MOVW	$0x5A827999, Rconst
 	MOVW	$3, Rctr
 loop1:	ROUND1(Ra, Rb, Rc, Rd, Re)
@@ -206,7 +206,7 @@ loop4:	ROUND4(Ra, Rb, Rc, Rd, Re)
 	ADD	Rctr, Rd
 	ADD	Rw, Re
 
-	MOVW	p_end(SP), Rt0
+	MOVW	p_end(R13), Rt0
 	CMP	Rt0, Rdata
 	BLO	loop
 
diff --git a/src/runtime/asm_arm.s b/src/runtime/asm_arm.s
index cd81c25d6a8667c6dea5e5070883d2c159f5b205..a80d3d4e91e4e35ee6526cc38358424ed99617f3 100644
--- a/src/runtime/asm_arm.s
+++ b/src/runtime/asm_arm.s
@@ -106,7 +106,7 @@ TEXT runtime路asminit(SB),NOSPLIT,$0-0
 // void gosave(Gobuf*)
 // save state in Gobuf; setjmp
 TEXT runtime路gosave(SB),NOSPLIT,$-4-4
-	MOVW	0(FP), R0		// gobuf
+	MOVW	gobuf+0(FP), R0
 	MOVW	R13, gobuf_sp(R0)
 	MOVW	LR, gobuf_pc(R0)
 	MOVW	g, gobuf_g(R0)
@@ -119,7 +119,7 @@ TEXT runtime路gosave(SB),NOSPLIT,$-4-4
 // void gogo(Gobuf*)
 // restore state from Gobuf; longjmp
 TEXT runtime路gogo(SB),NOSPLIT,$-4-4
-	MOVW	0(FP), R1		// gobuf
+	MOVW	gobuf+0(FP), R1
 	MOVW	gobuf_g(R1), R0
 	BL	setg<>(SB)
 
@@ -172,7 +172,7 @@ TEXT runtime路mcall(SB),NOSPLIT,$-4-4
 	MOVW	fn+0(FP), R0
 	MOVW	(g_sched+gobuf_sp)(g), R13
 	SUB	$8, R13
-	MOVW	R1, 4(SP)
+	MOVW	R1, 4(R13)
 	MOVW	R0, R7
 	MOVW	0(R0), R0
 	BL	(R0)
@@ -292,7 +292,7 @@ TEXT runtime路morestack(SB),NOSPLIT,$-4-0
 	// Set m->morebuf to f's caller.
 	MOVW	R3, (m_morebuf+gobuf_pc)(R8)	// f's caller's PC
 	MOVW	R13, (m_morebuf+gobuf_sp)(R8)	// f's caller's SP
-	MOVW	$4(SP), R3			// f's argument pointer
+	MOVW	$4(R13), R3			// f's argument pointer
 	MOVW	g, (m_morebuf+gobuf_g)(R8)
 
 	// Call newstack on m->g0's stack.
@@ -440,11 +440,11 @@ CALLFN(路call1073741824, 1073741824)
 // interrupt can never see mismatched SP/LR/PC.
 // (And double-check that pop is atomic in that way.)
 TEXT runtime路jmpdefer(SB),NOSPLIT,$0-8
-	MOVW	0(SP), LR
+	MOVW	0(R13), LR
 	MOVW	$-4(LR), LR	// BL deferreturn
 	MOVW	fv+0(FP), R7
 	MOVW	argp+4(FP), R13
-	MOVW	$-4(SP), R13	// SP is 4 below argp, due to saved LR
+	MOVW	$-4(R13), R13	// SP is 4 below argp, due to saved LR
 	MOVW	0(R7), R1
 	B	(R1)
 
@@ -646,7 +646,7 @@ TEXT setg<>(SB),NOSPLIT,$-4-0
 	RET
 
 TEXT runtime路getcallerpc(SB),NOSPLIT,$-4-4
-	MOVW	0(SP), R0
+	MOVW	0(R13), R0
 	MOVW	R0, ret+4(FP)
 	RET
 
@@ -656,18 +656,18 @@ TEXT runtime路gogetcallerpc(SB),NOSPLIT,$-4-8
 
 TEXT runtime路setcallerpc(SB),NOSPLIT,$-4-8
 	MOVW	pc+4(FP), R0
-	MOVW	R0, 0(SP)
+	MOVW	R0, 0(R13)
 	RET
 
 TEXT runtime路getcallersp(SB),NOSPLIT,$-4-4
-	MOVW	0(FP), R0
+	MOVW	addr+0(FP), R0
 	MOVW	$-4(R0), R0
 	MOVW	R0, ret+4(FP)
 	RET
 
 // func gogetcallersp(p unsafe.Pointer) uintptr
 TEXT runtime路gogetcallersp(SB),NOSPLIT,$-4-8
-	MOVW	0(FP), R0
+	MOVW	addr+0(FP), R0
 	MOVW	$-4(R0), R0
 	MOVW	R0, ret+4(FP)
 	RET
diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s
index b0a9b4fc7de8b123e2632a9c2a32c2a585f90696..11d20b8dce8e71c4720b26bd7cc99ad989442f1f 100644
--- a/src/runtime/sys_linux_arm.s
+++ b/src/runtime/sys_linux_arm.s
@@ -52,49 +52,49 @@
 #define ARM_BASE (SYS_BASE + 0x0f0000)
 
 TEXT runtime路open(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	name+0(FP), R0
+	MOVW	flag+4(FP), R1
+	MOVW	mode+8(FP), R2
 	MOVW	$SYS_open, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
 	RET
 
 TEXT runtime路close(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
+	MOVW	fd+0(FP), R0
 	MOVW	$SYS_close, R7
 	SWI	$0
 	MOVW	R0, ret+4(FP)
 	RET
 
 TEXT runtime路write(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	fd+0(FP), R0
+	MOVW	buf+4(FP), R1
+	MOVW	n+8(FP), R2
 	MOVW	$SYS_write, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
 	RET
 
 TEXT runtime路read(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	fd+0(FP), R0
+	MOVW	buf+4(FP), R1
+	MOVW	n+8(FP), R2
 	MOVW	$SYS_read, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
 	RET
 
 TEXT runtime路getrlimit(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
+	MOVW	res+0(FP), R0
+	MOVW	rlp+4(FP), R1
 	MOVW	$SYS_ugetrlimit, R7
 	SWI	$0
 	MOVW	R0, ret+8(FP)
 	RET
 
 TEXT runtime路exit(SB),NOSPLIT,$-4
-	MOVW	0(FP), R0
+	MOVW	code+0(FP), R0
 	MOVW	$SYS_exit_group, R7
 	SWI	$0
 	MOVW	$1234, R0
@@ -102,7 +102,7 @@ TEXT runtime路exit(SB),NOSPLIT,$-4
 	MOVW	R0, (R1)	// fail hard
 
 TEXT runtime路exit1(SB),NOSPLIT,$-4
-	MOVW	0(FP), R0
+	MOVW	code+0(FP), R0
 	MOVW	$SYS_exit, R7
 	SWI	$0
 	MOVW	$1234, R0
@@ -128,12 +128,12 @@ TEXT	runtime路raiseproc(SB),NOSPLIT,$-4
 	RET
 
 TEXT runtime路mmap(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
-	MOVW	12(FP), R3
-	MOVW	16(FP), R4
-	MOVW	20(FP), R5
+	MOVW	addr+0(FP), R0
+	MOVW	len+4(FP), R1
+	MOVW	prot+8(FP), R2
+	MOVW	flags+12(FP), R3
+	MOVW	fd+16(FP), R4
+	MOVW	off+20(FP), R5
 	MOVW	$SYS_mmap2, R7
 	SWI	$0
 	MOVW	$0xfffff001, R6
@@ -143,8 +143,8 @@ TEXT runtime路mmap(SB),NOSPLIT,$0
 	RET
 
 TEXT runtime路munmap(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
+	MOVW	addr+0(FP), R0
+	MOVW	len+4(FP), R1
 	MOVW	$SYS_munmap, R7
 	SWI	$0
 	MOVW	$0xfffff001, R6
@@ -154,26 +154,26 @@ TEXT runtime路munmap(SB),NOSPLIT,$0
 	RET
 
 TEXT runtime路madvise(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	addr+0(FP), R0
+	MOVW	len+4(FP), R1
+	MOVW	advice+8(FP), R2
 	MOVW	$SYS_madvise, R7
 	SWI	$0
 	// ignore failure - maybe pages are locked
 	RET
 
 TEXT runtime路setitimer(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	which+0(FP), R0
+	MOVW	value+4(FP), R1
+	MOVW	ovalue+8(FP), R2
 	MOVW	$SYS_setitimer, R7
 	SWI	$0
 	RET
 
 TEXT runtime路mincore(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	addr+0(FP), R0
+	MOVW	len+4(FP), R1
+	MOVW	vec+8(FP), R2
 	MOVW	$SYS_mincore, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
@@ -188,10 +188,10 @@ TEXT time路now(SB), NOSPLIT, $32
 	MOVW	8(R13), R0  // sec
 	MOVW	12(R13), R2  // nsec
 	
-	MOVW	R0, 0(FP)
+	MOVW	R0, sec+0(FP)
 	MOVW	$0, R1
-	MOVW	R1, 4(FP)
-	MOVW	R2, 8(FP)
+	MOVW	R1, loc+4(FP)
+	MOVW	R2, nsec+8(FP)
 	RET	
 
 // int64 nanotime(void)
@@ -217,12 +217,12 @@ TEXT runtime路nanotime(SB),NOSPLIT,$32
 // int32 futex(int32 *uaddr, int32 op, int32 val,
 //	struct timespec *timeout, int32 *uaddr2, int32 val2);
 TEXT runtime路futex(SB),NOSPLIT,$0
-	MOVW	4(SP), R0
-	MOVW	8(SP), R1
-	MOVW	12(SP), R2
-	MOVW	16(SP), R3
-	MOVW	20(SP), R4
-	MOVW	24(SP), R5
+	MOVW	4(R13), R0
+	MOVW	8(R13), R1
+	MOVW	12(R13), R2
+	MOVW	16(R13), R3
+	MOVW	20(R13), R4
+	MOVW	24(R13), R5
 	MOVW	$SYS_futex, R7
 	SWI	$0
 	MOVW	R0, ret+24(FP)
@@ -297,8 +297,8 @@ TEXT runtime路clone(SB),NOSPLIT,$0
 	MOVW	R0, (R1)
 
 TEXT runtime路sigaltstack(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
+	MOVW	ss+0(FP), R0
+	MOVW	oss+4(FP), R1
 	MOVW	$SYS_sigaltstack, R7
 	SWI	$0
 	MOVW	$0xfffff001, R6
@@ -345,19 +345,19 @@ TEXT runtime路sigtramp(SB),NOSPLIT,$24
 	RET
 
 TEXT runtime路rtsigprocmask(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
-	MOVW	12(FP), R3
+	MOVW	mask+0(FP), R0
+	MOVW	how+4(FP), R1
+	MOVW	set+8(FP), R2
+	MOVW	oldset+12(FP), R3
 	MOVW	$SYS_rt_sigprocmask, R7
 	SWI	$0
 	RET
 
 TEXT runtime路rt_sigaction(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
-	MOVW	12(FP), R3
+	MOVW	mask+0(FP), R0
+	MOVW	signum+4(FP), R1
+	MOVW	act+8(FP), R2
+	MOVW	oldact+12(FP), R3
 	MOVW	$SYS_rt_sigaction, R7
 	SWI	$0
 	MOVW	R0, ret+16(FP)
@@ -369,13 +369,13 @@ TEXT runtime路usleep(SB),NOSPLIT,$12
 	MOVW	$1000000, R2
 	DIV	R2, R0
 	MOD	R2, R1
-	MOVW	R0, 4(SP)
-	MOVW	R1, 8(SP)
+	MOVW	R0, 4(R13)
+	MOVW	R1, 8(R13)
 	MOVW	$0, R0
 	MOVW	$0, R1
 	MOVW	$0, R2
 	MOVW	$0, R3
-	MOVW	$4(SP), R4
+	MOVW	$4(R13), R4
 	MOVW	$SYS_select, R7
 	SWI	$0
 	RET
@@ -415,9 +415,9 @@ TEXT runtime路osyield(SB),NOSPLIT,$0
 	RET
 
 TEXT runtime路sched_getaffinity(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	pid+0(FP), R0
+	MOVW	setsize+4(FP), R1
+	MOVW	mask+8(FP), R2
 	MOVW	$SYS_sched_getaffinity, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
@@ -425,7 +425,7 @@ TEXT runtime路sched_getaffinity(SB),NOSPLIT,$0
 
 // int32 runtime路epollcreate(int32 size)
 TEXT runtime路epollcreate(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
+	MOVW	size+0(FP), R0
 	MOVW	$SYS_epoll_create, R7
 	SWI	$0
 	MOVW	R0, ret+4(FP)
@@ -433,7 +433,7 @@ TEXT runtime路epollcreate(SB),NOSPLIT,$0
 
 // int32 runtime路epollcreate1(int32 flags)
 TEXT runtime路epollcreate1(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
+	MOVW	size+0(FP), R0
 	MOVW	$SYS_epoll_create1, R7
 	SWI	$0
 	MOVW	R0, ret+4(FP)
@@ -452,10 +452,10 @@ TEXT runtime路epollctl(SB),NOSPLIT,$0
 
 // int32 runtime路epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout)
 TEXT runtime路epollwait(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
-	MOVW	12(FP), R3
+	MOVW	epfd+0(FP), R0
+	MOVW	events+4(FP), R1
+	MOVW	maxevents+8(FP), R2
+	MOVW	timeout+12(FP), R3
 	MOVW	$SYS_epoll_wait, R7
 	SWI	$0
 	MOVW	R0, ret+16(FP)
@@ -463,7 +463,7 @@ TEXT runtime路epollwait(SB),NOSPLIT,$0
 
 // void runtime路closeonexec(int32 fd)
 TEXT runtime路closeonexec(SB),NOSPLIT,$0
-	MOVW	0(FP), R0	// fd
+	MOVW	fd+0(FP), R0	// fd
 	MOVW	$2, R1	// F_SETFD
 	MOVW	$1, R2	// FD_CLOEXEC
 	MOVW	$SYS_fcntl, R7
@@ -476,26 +476,26 @@ TEXT runtime路read_tls_fallback(SB),NOSPLIT,$-4
 	B	(R0)
 
 TEXT runtime路access(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
+	MOVW	name+0(FP), R0
+	MOVW	mode+4(FP), R1
 	MOVW	$SYS_access, R7
 	SWI	$0
 	MOVW	R0, ret+8(FP)
 	RET
 
 TEXT runtime路connect(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	fd+0(FP), R0
+	MOVW	addr+4(FP), R1
+	MOVW	addrlen+8(FP), R2
 	MOVW	$SYS_connect, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
 	RET
 
 TEXT runtime路socket(SB),NOSPLIT,$0
-	MOVW	0(FP), R0
-	MOVW	4(FP), R1
-	MOVW	8(FP), R2
+	MOVW	domain+0(FP), R0
+	MOVW	type+4(FP), R1
+	MOVW	protocol+8(FP), R2
 	MOVW	$SYS_socket, R7
 	SWI	$0
 	MOVW	R0, ret+12(FP)
diff --git a/src/runtime/vlop_arm.s b/src/runtime/vlop_arm.s
index 28f75190ec6a9a3efdd3250329436f46dd547fea..b4a40c0ab211aeeffd35a3f2a64de4bda70388b4 100644
--- a/src/runtime/vlop_arm.s
+++ b/src/runtime/vlop_arm.s
@@ -226,7 +226,7 @@ TEXT _divu(SB), NOSPLIT, $16
 	MOVW	RM, 16(R13)
 
 	MOVW	RTMP, Rr		/* numerator */
-	MOVW	0(FP), Rq 		/* denominator */
+	MOVW	den+0(FP), Rq 		/* denominator */
 	BL  	udiv<>(SB)
 	MOVW	Rq, RTMP
 	MOVW	4(R13), Rq
@@ -242,7 +242,7 @@ TEXT _modu(SB), NOSPLIT, $16
 	MOVW	RM, 16(R13)
 
 	MOVW	RTMP, Rr		/* numerator */
-	MOVW	0(FP), Rq 		/* denominator */
+	MOVW	den+0(FP), Rq 		/* denominator */
 	BL  	udiv<>(SB)
 	MOVW	Rr, RTMP
 	MOVW	4(R13), Rq
@@ -257,7 +257,7 @@ TEXT _div(SB),NOSPLIT,$16
 	MOVW	Rs, 12(R13)
 	MOVW	RM, 16(R13)
 	MOVW	RTMP, Rr		/* numerator */
-	MOVW	0(FP), Rq 		/* denominator */
+	MOVW	den+0(FP), Rq 		/* denominator */
 	CMP 	$0, Rr
 	BGE 	d1
 	RSB 	$0, Rr, Rr
@@ -288,7 +288,7 @@ TEXT _mod(SB),NOSPLIT,$16
 	MOVW	Rs, 12(R13)
 	MOVW	RM, 16(R13)
 	MOVW	RTMP, Rr		/* numerator */
-	MOVW	0(FP), Rq 		/* denominator */
+	MOVW	den+0(FP), Rq 		/* denominator */
 	CMP 	$0, Rq
 	RSB.LT	$0, Rq, Rq
 	CMP 	$0, Rr
diff --git a/src/sync/atomic/asm_linux_arm.s b/src/sync/atomic/asm_linux_arm.s
index 63562388a28bcbed9e50dc727dd40992f70e8a05..631c105ff602f88bb09d27866489df5772d98fb7 100644
--- a/src/sync/atomic/asm_linux_arm.s
+++ b/src/sync/atomic/asm_linux_arm.s
@@ -107,12 +107,12 @@ TEXT kernelCAS64<>(SB),NOSPLIT,$0-21
 	AND.S	$7, R2, R1
 	BEQ 	2(PC)
 	MOVW	R1, (R1)
-	MOVW	$4(FP), R0 // oldval
-	MOVW	$12(FP), R1 // newval
+	MOVW	$oldval+4(FP), R0
+	MOVW	$newval+12(FP), R1
 	BL	cas64<>(SB)
 	MOVW.CS	$1, R0 // C is set if the kernel has changed *ptr
 	MOVW.CC	$0, R0
-	MOVW	R0, 20(FP)
+	MOVW	R0, ret+20(FP)
 	RET
 
 TEXT 路generalCAS64(SB),NOSPLIT,$0-21