diff options
| author | Russ Cox <rsc@golang.org> | 2010-04-05 12:51:09 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-04-05 12:51:09 -0700 |
| commit | e1b021aaf220611b99a25e40b618d0bddef46766 (patch) | |
| tree | e2bf4258f564d82aefbc656e700d7ab0d6acbdc4 /src/pkg/runtime/arm/softfloat.c | |
| parent | bca5b465fee7deddf3c314127803d6acfe236517 (diff) | |
| download | golang-e1b021aaf220611b99a25e40b618d0bddef46766.tar.gz | |
runtime: various arm fixes
* correct symbol table size
* do not reorder functions in output
* traceback
* signal handling
* use same code for go + defer
* handle leaf functions in symbol table
R=kaib, dpx
CC=golang-dev
http://codereview.appspot.com/884041
Diffstat (limited to 'src/pkg/runtime/arm/softfloat.c')
| -rw-r--r-- | src/pkg/runtime/arm/softfloat.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/pkg/runtime/arm/softfloat.c b/src/pkg/runtime/arm/softfloat.c index a71b25113..50ccd1546 100644 --- a/src/pkg/runtime/arm/softfloat.c +++ b/src/pkg/runtime/arm/softfloat.c @@ -4,24 +4,24 @@ #include "runtime.h" -// returns number of bytes that the fp instruction is occupying +// returns number of words that the fp instruction is occupying static uint32 isfltinstr(uint32 *pc) { uint32 i; uint32 c; - + i = *pc; c = i >> 25 & 7; - + switch(c) { case 6: // 110 //printf(" %p coproc multi: %x\n", pc, i); - return 4; + return 1; case 7: // 111 if (i>>24 & 1) return 0; // ignore swi //printf(" %p coproc %x\n", pc, i); - return 4; + return 1; } // lookahead for virtual instructions that span multiple arm instructions @@ -30,7 +30,7 @@ isfltinstr(uint32 *pc) ((*(pc + 2) & 0x0f000000) >> 24); if(c == 0x50d) { //printf(" %p coproc const %x\n", pc, i); - return 12; + return 3; } //printf(" %p %x\n", pc, i); @@ -42,7 +42,7 @@ uint32* _sfloat2(uint32 *lr, uint32 r0) { uint32 skip; - + //printf("softfloat: pre %p\n", lr); while(skip = isfltinstr(lr)) lr += skip; |
