diff options
| author | Kai Backman <kaib@golang.org> | 2009-06-25 11:26:10 -0700 |
|---|---|---|
| committer | Kai Backman <kaib@golang.org> | 2009-06-25 11:26:10 -0700 |
| commit | 2e9a57ee73266912eac4e5c0ee75537c8464bac3 (patch) | |
| tree | d673a7844556f9e9b833f1bf8ecf0a5dd3e85ead | |
| parent | 6dbeafec7259829e1988ee5937f93d8be5b713e9 (diff) | |
| download | golang-2e9a57ee73266912eac4e5c0ee75537c8464bac3.tar.gz | |
Add Gobuf.r0 that stores arg0 or return value of
goroutine. arm only.
R=rsc
APPROVED=rsc
DELTA=5 (3 added, 2 deleted, 0 changed)
OCL=30644
CL=30746
| -rw-r--r-- | src/pkg/runtime/arm/asm.s | 4 | ||||
| -rw-r--r-- | src/pkg/runtime/runtime.h | 1 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/pkg/runtime/arm/asm.s b/src/pkg/runtime/arm/asm.s index 39ac99ec6..f709ebbd8 100644 --- a/src/pkg/runtime/arm/asm.s +++ b/src/pkg/runtime/arm/asm.s @@ -111,7 +111,6 @@ TEXT gogo(SB), 7, $0 // void gogocall(Gobuf*, void (*fn)(void)) // restore state from Gobuf but then call fn. // (call fn, returning to state in Gobuf) -// TODO(kaib): add R0 to gobuf so it can be restored properly // using frame size $-4 means do not save LR on stack. TEXT gogocall(SB), 7, $-4 MOVW 8(SP), R1 // fn @@ -119,6 +118,7 @@ TEXT gogocall(SB), 7, $-4 MOVW 0(g), R2 // make sure g != nil MOVW gobuf_sp(R0), SP // restore SP MOVW gobuf_pc(R0), LR + MOVW gobuf_r0(R0), R0 MOVW R1, PC /* @@ -146,6 +146,7 @@ TEXT sys·morestack(SB),7,$-4 MOVW R3, (m_morebuf+gobuf_pc)(m) // f's caller's PC MOVW SP, (m_morebuf+gobuf_sp)(m) // f's caller's SP MOVW g, (m_morebuf+gobuf_g)(m) + MOVW R0, (m_morebuf+gobuf_r0)(m) // Set m->morepc to f's PC. MOVW LR, m_morepc(m) @@ -172,7 +173,6 @@ TEXT sys·lessstack(SB), 7, $-4 // R3 is LR for f (f's caller's PC) // using frame size $-4 means do not save LR on stack. TEXT sys·morestackx(SB), 7, $-4 - MOVW R0, 0(FP) // Save arg0 MOVW $0, R1 // set frame size B sys·morestack(SB) diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h index 662fde759..d7bf807cc 100644 --- a/src/pkg/runtime/runtime.h +++ b/src/pkg/runtime/runtime.h @@ -138,6 +138,7 @@ struct Gobuf byte* sp; byte* pc; G* g; + uintptr r0; // used on arm }; struct G { |
