summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5l/span.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-01-26 18:03:45 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2013-01-26 18:03:45 +0100
commitea0f58090923bd7e435c4f48eb751854a4292b9a (patch)
tree8b138cec9ef636d436bae9d5a128643779b95754 /sys/src/cmd/5l/span.c
parentbc610a1b1c32f6e2e9b034217bb3ce9a7defa739 (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.c11
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];