summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5l/noop.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/noop.c
parentbc610a1b1c32f6e2e9b034217bb3ce9a7defa739 (diff)
add arm vfp support to compiler and linker (from sources)
Diffstat (limited to 'sys/src/cmd/5l/noop.c')
-rw-r--r--sys/src/cmd/5l/noop.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/src/cmd/5l/noop.c b/sys/src/cmd/5l/noop.c
index 87cc851d0..e68c08f6f 100644
--- a/sys/src/cmd/5l/noop.c
+++ b/sys/src/cmd/5l/noop.c
@@ -302,6 +302,30 @@ noops(void)
break;
+ /*
+ * 5c code generation for unsigned -> double made the
+ * unfortunate assumption that single and double floating
+ * point registers are aliased - true for emulated 7500
+ * but not for vfp. Now corrected, but this test is
+ * insurance against old 5c compiled code in libraries.
+ */
+ case AMOVWD:
+ if((q = p->link) != P && q->as == ACMP)
+ if((q = q->link) != P && q->as == AMOVF)
+ if((q1 = q->link) != P && q1->as == AADDF)
+ if(q1->to.type == D_FREG && q1->to.reg == p->to.reg) {
+ q1->as = AADDD;
+ q1 = prg();
+ q1->scond = q->scond;
+ q1->line = q->line;
+ q1->as = AMOVFD;
+ q1->from = q->to;
+ q1->to = q1->from;
+ q1->link = q->link;
+ q->link = q1;
+ }
+ break;
+
case ADIV:
case ADIVU:
case AMOD: