summaryrefslogtreecommitdiff
path: root/bcc/function.c
diff options
context:
space:
mode:
authorRobert de Bath <rdebath@poboxes.com>1998-07-01 01:00:00 +0200
committerLubomir Rintel <lkundrak@v3.sk>2013-10-23 23:40:31 +0200
commitec5f28e3f1400b5dacb88eda2d9db472a20b4349 (patch)
treeb3215b2306709d0412fd7845c78ca63ccaa2e29b /bcc/function.c
parent2f828530e36a02c5b4c534e42ab812370c2bf7d9 (diff)
downloaddev86-ec5f28e3f1400b5dacb88eda2d9db472a20b4349.tar.gz
Import Dev86src-0.14.3.tar.gzv0.14.3
Diffstat (limited to 'bcc/function.c')
-rw-r--r--bcc/function.c50
1 files changed, 36 insertions, 14 deletions
diff --git a/bcc/function.c b/bcc/function.c
index 85bf007..db2745d 100644
--- a/bcc/function.c
+++ b/bcc/function.c
@@ -85,14 +85,24 @@ struct symstruct *source;
#endif
source->storage = BREG;
}
- else if (source->type->scalar & DOUBLE)
- source->storage = doublreturnregs & ~DREG;
-#if 0
- else if (source->type->scalar & FLOAT)
- source->storage = floatreturnregs /* XXX? & ~DREG */;
-#endif
+#ifdef I80386
+ else if (i386_32)
+ {
+ if (source->type->scalar & DOUBLE)
+ source->storage = doublreturnregs & ~DREG;
+ else
+ source->storage = RETURNREG;
+ }
else
- source->storage = RETURNREG;
+#endif
+ {
+ if (source->type->scalar & DOUBLE)
+ source->storage = doublreturnregs;
+ else if (source->type->scalar & FLOAT)
+ source->storage = RETURNREG|DATREG2;
+ else
+ source->storage = RETURNREG;
+ }
source->offset.offi = source->indcount = 0;
if (source->level == OFFKLUDGELEVEL)
source->level = EXPRLEVEL;
@@ -186,14 +196,26 @@ PUBLIC void loadretexpression()
}
else
#endif
- if (returntype->scalar & DOUBLE)
- loadexpression(doublreturnregs & ~DREG, returntype);
-#if 0
- else if (returntype->scalar & FLOAT)
- loadexpression(floatreturnregs /* XXX? & ~DREG */, returntype);
+ {
+#ifdef I80386
+ if (i386_32)
+ {
+ if (returntype->scalar & DOUBLE)
+ loadexpression(doublreturnregs & ~DREG, returntype);
+ else
+ loadexpression(RETURNREG, returntype);
+ }
+ else
#endif
- else
- loadexpression(RETURNREG, returntype);
+ {
+ if (returntype->scalar & DOUBLE)
+ loadexpression(doublreturnregs, returntype);
+ else if (returntype->scalar & FLOAT)
+ loadexpression(/* REURNREG|*/ DATREG2, returntype);
+ else
+ loadexpression(RETURNREG, returntype);
+ }
+ }
}
PUBLIC void listo(target, lastargsp)