changeset 212:32f54ab63b35

*** empty log message ***
author kono
date Fri, 23 Apr 2004 03:27:01 +0900
parents dbad3172fa14
children 8581c314e31a
files Changes mc-code-ia32.c mc-code-mips.c mc-code-powerpc.c mc-code.h mc-codegen.c mc.h
diffstat 7 files changed, 31 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Fri Apr 23 03:27:01 2004 +0900
+++ b/Changes	Fri Apr 23 03:27:01 2004 +0900
@@ -3944,6 +3944,12 @@
 
 Thu Apr 22 12:33:04 JST 2004
 
+ようやっと、int/float が元に戻りました。
+
 lrexpr は、codegen で、long の計算に置き換えた方がいい?
 でも、それだと、64bit 演算をサポートしているCPUがうれしく
 ないか。
+
+あと、もう少し! でも、2,3日かかりそう。
+loprtc も、あった方がいいんじゃない?  (まね....)
+
--- a/mc-code-ia32.c	Fri Apr 23 03:27:01 2004 +0900
+++ b/mc-code-ia32.c	Fri Apr 23 03:27:01 2004 +0900
@@ -2153,7 +2153,7 @@
 
 }
 
-void code_lneg(int e1,int e2)
+void code_lneg(int e1)
 {
 
 }
--- a/mc-code-mips.c	Fri Apr 23 03:27:01 2004 +0900
+++ b/mc-code-mips.c	Fri Apr 23 03:27:01 2004 +0900
@@ -2822,7 +2822,7 @@
 
 }
 
-void code_lneg(int e1,int e2)
+void code_lneg(int e1)
 {
 
 }
--- a/mc-code-powerpc.c	Fri Apr 23 03:27:01 2004 +0900
+++ b/mc-code-powerpc.c	Fri Apr 23 03:27:01 2004 +0900
@@ -3449,7 +3449,7 @@
 emit_lpush()
 {
     int new_reg;
-    if (!is_longlong(creg)) error(-1);
+    if (!is_longlong_reg(creg)) error(-1);
     if (lreg_sp>MAX_MAX) error(-1);
     new_reg = get_lregister();
     lreg_stack[lreg_sp++] = creg;     /* push するかわりにレジスタを使う */
@@ -3572,7 +3572,7 @@
 code_lpreinc(int e1,int e2,int reg)
 {
     char *xrn,*drn_h,*drn_l;
-    int i,dreg;
+    int dreg;
     int dir=caddr(e1);
     if (car(e2)==LREGISTER) {
         printf("\taddci %s,%s,%d\n", 
@@ -3595,10 +3595,10 @@
     printf("\tlzw %s,%d(%s)\n",drn_l,size_of_int,xrn);
     printf("\tlzw %s,0(%s)\n",drn_h,xrn);
     printf("\taddci %s,%s,%d\n",drn_l,drn_l,dir);
-    printf("\taddei %s,%s,0\n",drn_h,drn_h,dir);
+    printf("\taddei %s,%s,0\n",drn_h,drn_h);
     printf("\tstw %s,%d(%s)\n",drn_l,size_of_int,xrn);
     printf("\tstw %s,0(%s)\n",drn_h,xrn);
-    set_lreg(dreg);
+    set_lreg(dreg,0);
 }
 
 void
@@ -3606,7 +3606,7 @@
 {
     char *xrn,*drn_h,*drn_l;
     char *nrn_h,*nrn_l;
-    int i,dreg,nreg;
+    int dreg,nreg;
     int dir=caddr(e1);
     if (car(e2)==LREGISTER) {
 	printf("\tmr %s,%s\n",lregister_name_low(cadr(reg)),
@@ -3630,11 +3630,11 @@
     printf("\tlzw %s,%d(%s)\n",drn_l,size_of_int,xrn);
     printf("\tlzw %s,0(%s)\n",drn_h,xrn);
     printf("\taddci %s,%s,%d\n",nrn_l,drn_l,dir);
-    printf("\taddei %s,%s,0\n",nrn_h,drn_h,dir);
+    printf("\taddei %s,%s,0\n",nrn_h,drn_h);
     printf("\tstw %s,%d(%s)\n",nrn_l,size_of_int,xrn);
     printf("\tstw %s,0(%s)\n",nrn_h,xrn);
     free_register(nreg);
-    set_lreg(dreg);
+    set_lreg(dreg,0);
 }
 
 void
@@ -3688,6 +3688,15 @@
         }
     }
 #endif
+#if LONGLONG_CODE
+    for(i=0;i<lreg_sp;i++) {
+        if ((reg=lreg_stack[i])>=0) {
+            code_assign_lvar(
+                (lreg_stack[i]=new_lvar(size_of_longlong)),reg,0); 
+            lreg_stack[i]= lreg_stack[i]-REG_LVAR_OFFSET;
+        }
+    }
+#endif
 }
 
 void
--- a/mc-code.h	Fri Apr 23 03:27:01 2004 +0900
+++ b/mc-code.h	Fri Apr 23 03:27:01 2004 +0900
@@ -163,7 +163,7 @@
 extern void code_lassign_lvar(int,int);
 extern void code_lassign_lregister(int e2,int reg);
 extern void code_lconst(int,int);
-extern void code_lneg(int,int);
+extern void code_lneg(int);
 extern void code_lrgvar(int,int);
 extern void code_lrlvar(int,int);
 extern void ltosop(int,int);
--- a/mc-codegen.c	Fri Apr 23 03:27:01 2004 +0900
+++ b/mc-codegen.c	Fri Apr 23 03:27:01 2004 +0900
@@ -267,6 +267,11 @@
     case MINUS:  /* レジスタに対し、neglを実行すれば実現可能 */
 	g_expr0(e2); code_neg(creg);
 	return INT;
+#if LONGLONG_CODE
+    case LMINUS: 
+	g_expr0(e2); code_lneg(creg);
+	return LONGLONG;
+#endif
 #if FLOAT_CODE
     case DMINUS: 
 	g_expr0(e2); code_dneg(creg,1);
--- a/mc.h	Fri Apr 23 03:27:01 2004 +0900
+++ b/mc.h	Fri Apr 23 03:27:01 2004 +0900
@@ -11,7 +11,7 @@
 #endif
 
 #define FLOAT_CODE 1
-#define LONGLONG_CODE 0
+#define LONGLONG_CODE 1
 
 #define SIZE_INT   4