summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/arm/softfloat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/arm/softfloat.c')
-rw-r--r--src/pkg/runtime/arm/softfloat.c14
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;