aboutsummaryrefslogtreecommitdiff
path: root/arm-gen.c
diff options
context:
space:
mode:
authorjiang <30155751@qq.com>2014-05-03 23:51:09 +0800
committerjiang <30155751@qq.com>2014-05-03 23:51:09 +0800
commit089dea355a28da44376ce4f5195baa4b4e0b217d (patch)
tree6b06240e0d4f7271d3e165cbf962750e689e566c /arm-gen.c
parenta0d45c1bcd87d2388817076ac9b62343d8ae04c3 (diff)
downloadtinycc-089dea355a28da44376ce4f5195baa4b4e0b217d.tar.gz
tinycc-089dea355a28da44376ce4f5195baa4b4e0b217d.tar.bz2
tcc on i386 are still having problems at work.Thank Roy report again. Struck on several variables can be connected to commit in the register. I am worried whether tcc can run the os. Since my machine is ubuntu 64 bits I can test my machine.
Diffstat (limited to 'arm-gen.c')
-rw-r--r--arm-gen.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/arm-gen.c b/arm-gen.c
index 6da1706..567c868 100644
--- a/arm-gen.c
+++ b/arm-gen.c
@@ -61,7 +61,7 @@
#define RC_IRET RC_R0 /* function return: integer register */
#define RC_LRET RC_R1 /* function return: second integer register */
#define RC_FRET RC_F0 /* function return: float register */
-
+#define RC_MASK (RC_INT|RC_FLOAT)
/* pretty names for the registers */
enum {
TREG_R0 = 0,
@@ -540,6 +540,14 @@ void load(int r, SValue *sv)
v = fr & VT_VALMASK;
if (fr & VT_LVAL) {
uint32_t base = 0xB; // fp
+ if(fr & VT_TMP){
+ int size, align;
+ if((ft & VT_BTYPE) == VT_FUNC)
+ size = PTR_SIZE;
+ else
+ size = type_size(&sv->type, &align);
+ loc_stack(size, 0);
+ }
if(v == VT_LLOCAL) {
v1.type.t = VT_PTR;
v1.r = VT_LOCAL | VT_LVAL;