Commit 345350bf authored by Rob Pike's avatar Rob Pike

[dev.cc] cmd/asm: make 4(SP) illegal except on 386

Require a name to be specified when referencing the pseudo-stack.
If you want a real stack offset, use the hardware stack pointer (e.g.,
R13 on arm), not SP.

Fix affected assembly files.

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