diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-26 18:03:45 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-26 18:03:45 +0100 |
commit | ea0f58090923bd7e435c4f48eb751854a4292b9a (patch) | |
tree | 8b138cec9ef636d436bae9d5a128643779b95754 /sys/src/cmd/5l/span.c | |
parent | bc610a1b1c32f6e2e9b034217bb3ce9a7defa739 (diff) |
add arm vfp support to compiler and linker (from sources)
Diffstat (limited to 'sys/src/cmd/5l/span.c')
-rw-r--r-- | sys/src/cmd/5l/span.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/src/cmd/5l/span.c b/sys/src/cmd/5l/span.c index c1a643452..b41b0e0c8 100644 --- a/sys/src/cmd/5l/span.c +++ b/sys/src/cmd/5l/span.c @@ -639,6 +639,9 @@ ocmp(const void *a1, const void *a2) n = (p2->flag&V4) - (p1->flag&V4); /* architecture version */ if(n) return n; + n = (p2->flag&VFP) - (p1->flag&VFP); /* floating point arch */ + if(n) + return n; n = p1->a1 - p2->a1; if(n) return n; @@ -657,14 +660,18 @@ buildop(void) int i, n, r; armv4 = !debug['h']; + vfp = debug['f']; for(i=0; i<C_GOK; i++) for(n=0; n<C_GOK; n++) xcmp[i][n] = cmp(n, i); - for(n=0; optab[n].as != AXXX; n++) + for(n=0; optab[n].as != AXXX; n++) { + if((optab[n].flag & VFP) && !vfp) + optab[n].as = AXXX; if((optab[n].flag & V4) && !armv4) { optab[n].as = AXXX; break; } + } qsort(optab, n, sizeof(optab[0]), ocmp); for(i=0; i<n; i++) { r = optab[i].as; @@ -679,6 +686,8 @@ buildop(void) default: diag("unknown op in build: %A", r); errorexit(); + case AXXX: + break; case AADD: oprange[AAND] = oprange[r]; oprange[AEOR] = oprange[r]; |