# HG changeset patch # User kono # Date 1084535872 -32400 # Node ID 8cd8d72286ae0debf56e8192a054c0cfc3b8ecd2 # Parent 5aaca4f9d96bb798cdf0ee1253b7daa38ebd0008 PowerPC long long complex function call fix. MIPS entry frame calc. diff -r 5aaca4f9d96b -r 8cd8d72286ae .gdbinit --- a/.gdbinit Wed May 12 21:44:45 2004 +0900 +++ b/.gdbinit Fri May 14 20:57:52 2004 +0900 @@ -1,7 +1,7 @@ tb main -run -s -ob00.s test/basic.c +# run -s -ob00.s test/basic.c # run -s -ob00.s mc-parse.c -# run -s test/code-gen-all.c +run -s test/code-gen-all.c define regs printf "pc =%08x lr =%08x r0 =%08x r1 =%08x r3= %08x r4= %08x\n",$pc,$lr,$r0,$r1,$r3,$r4 printf "r10=%08x r11=%08x r12=%08x r13=%08x r14=%08x r15=%08x\n",$r10,$r11,$r12,$r13,$r14,$r15 diff -r 5aaca4f9d96b -r 8cd8d72286ae Changes --- a/Changes Wed May 12 21:44:45 2004 +0900 +++ b/Changes Fri May 14 20:57:52 2004 +0900 @@ -4189,3 +4189,21 @@ int endian; extern int endian; も通す必要があるのね。まぁ、フラグの扱いだけだけど.... + +Thu May 13 12:58:58 JST 2004 + + .frame の数字には input variable のsave分も入るんじゃないの? + + code_l1 の ll0 がおかしくなるのは、strtoll がintに宣言されてるから。 + +function のargumentは複雑なものから計算して行くのがルールなのね。 +ま、そうだよな。できないことはない.... + +そうなのか。最初にループを廻して複雑なものをレジスタなり変数なり +に代入して、引数リストを置き換えてしまえば良い。ついでに、 +代入するべき変数はそこで計算しておいて... (って、これって、 +parallel_assignment でやっていることと同じか) + +その部分はcodegen でやってもいいんだけど... ia32 のような場合は +むしろ不要なのか。 + diff -r 5aaca4f9d96b -r 8cd8d72286ae Idea --- a/Idea Wed May 12 21:44:45 2004 +0900 +++ b/Idea Fri May 14 20:57:52 2004 +0900 @@ -1637,3 +1637,11 @@ CbC only で作れるから。 conv は、あんまり良いアイデアではないみたい。取るか。。。 + +Thu May 13 12:59:16 JST 2004 + +byte code interpreter を CbC 自身で書いたら? + +それでもやっぱり動かないから、あんまり意味はないんだけど... + +C で書いてもいいか。 diff -r 5aaca4f9d96b -r 8cd8d72286ae mc-code-mips.c --- a/mc-code-mips.c Wed May 12 21:44:45 2004 +0900 +++ b/mc-code-mips.c Fri May 14 20:57:52 2004 +0900 @@ -35,7 +35,6 @@ static int lvar_offset_label; // static int cprestore_label; static int max_func_args = 0; -static int max_func_iargs = 0; static int reg_save; @@ -884,27 +883,31 @@ text_mode(); } +#define reg_var_num(i) (REG_VAR_BASE-i) int get_register_var(NMTBL *n) { - int i; + int i,j; for(i=0;imax_reg_var) max_reg_var=i; + regs[j]=USING_REG; + if (i>=max_reg_var) max_reg_var=i+1; /* その場所を表す番号を返す */ - return list3(REGISTER,REG_VAR_BASE-i,(int)n); + return list3(REGISTER,j,(int)n); } } return list2(LVAR,new_lvar(SIZE_OF_INT)); } +#define freg_var_num(i) (FREG_VAR_BASE-i+FREG_OFFSET) + int get_dregister_var(NMTBL *n,int d) { - int i; + int i,j; if (d) { i = get_lregister_var(n); if (car(i)==LREGISTER) { @@ -915,12 +918,12 @@ } for(i=0;imax_freg_var) max_freg_var=i; + j = freg_var_num(i); + if (! regs[j]) { /* 使われていないなら */ + regs[j]=USING_REG; /*そのレジスタを使うことを宣言し*/ + if (i>=max_freg_var) max_freg_var=i+1; /* その場所を表す番号を返す */ - return list3(FREGISTER, - FREG_VAR_BASE-i+FREG_OFFSET,(int)n); + return list3(FREGISTER,j,(int)n); } } return list2(LVAR,new_lvar(SIZE_OF_DOUBLE)); @@ -1700,7 +1703,7 @@ { free_register(regv_h(lreg)); } - if (creg==lreg) creg = 0; + if (creg==lreg) creg = ireg; lreg = 0; } else if (regv_h(lreg)==reg) { regs[lreg]=0; @@ -1710,7 +1713,7 @@ { free_register(regv_l(lreg)); } - if (creg==lreg) creg = 0; + if (creg==lreg) creg = ireg; lreg = 0; } } @@ -1832,15 +1835,28 @@ arg = list2(LVAR,caller_arg_offset_v(nargs)); } else if (!simple_args(e3) && cadr(e3)) { arg = t==DOUBLE?get_dregister_var(0,1):get_lregister_var(0); - arg_assign = list2( - assign_expr0(r0= - (t==DOUBLE? - get_input_dregister_var(reg_arg,0,0,1): - get_input_lregister_var(reg_arg,0,0) - ), - arg,t,t), - arg_assign); - use_input_reg(cadr(r0),1); + if (car(arg)==LREGISTER||car(arg)==DREGISTER) { + // r0=get_input_lregiste... is not preserved + // we cannot mark r0 used, it consumes unused register + // but get_input_register is preserved. + // Beware endian. + arg_assign = list2( + assign_expr0(get_input_register_var(reg_arg,0,0), + list2(REGISTER,regv_l(cadr(arg))),INT,INT), + list2( + assign_expr0(get_input_register_var(reg_arg+1,0,0), + list2(REGISTER,regv_h(cadr(arg))),INT,INT), + arg_assign)); + } else { + arg_assign = list2( + assign_expr0(get_input_register_var(reg_arg,0,0), + list2(LVAR,cadr(arg)),INT,INT), + list2( + assign_expr0(get_input_register_var(reg_arg+1,0,0), + list2(LVAR,cadr(arg)+SIZE_OF_INT),INT,INT), + arg_assign)); + } + } else { arg = t==DOUBLE?get_input_dregister_var(reg_arg,0,0,1): get_input_lregister_var(reg_arg,0,0); @@ -1948,16 +1964,16 @@ void code_jmp(char *s) { - max_reg_var = REG_VAR_BASE-REG_VAR_MIN; - max_freg_var = FREG_VAR_BASE-FREG_VAR_MIN; + // max_reg_var = REG_VAR_BASE-REG_VAR_MIN; + // max_freg_var = FREG_VAR_BASE-FREG_VAR_MIN; printf("\tj $L_%s\n",s); } void code_indirect_jmp(int e2) { - max_reg_var = REG_VAR_BASE-REG_VAR_MIN; - max_freg_var = FREG_VAR_BASE-FREG_VAR_MIN; + // max_reg_var = REG_VAR_BASE-REG_VAR_MIN; + // max_freg_var = FREG_VAR_BASE-FREG_VAR_MIN; use_int(e2); printf("\tj %s\n",register_name(e2)); } @@ -2381,32 +2397,115 @@ printf("## %s",s); } +static int +code_mask_offset() +{ + /* used regsister var */ + int i; + int offset=0; + for(i=0;i<32;i++) { + if (i==28||i==31||(reg_var_num(0)>i&&i>reg_var_num(max_reg_var))) { + offset++; + } + } + if (offset>2) offset-=1; + return -offset*SIZE_OF_INT; +} + static unsigned int code_mask() { + /* used regsister var */ int i; unsigned int mask=0; for(i=0;i<32;i++) { - if (i==28||i==31||(REG_VAR_MIN<=i&&i<=REG_VAR_MIN+max_reg_var)) { + if (i==28||i==31||(reg_var_num(0)>i&&i>reg_var_num(max_reg_var))) { mask |= (1<i&&i>reg_var_num(max_reg_var)) { + printf("\tsw %s,%d($sp)\n",register_name(i),disp); + disp += SIZE_OF_INT; + } + } + return disp; +} + +static int +code_register_restore(reg_save,freg_save,disp) +{ + int i; + for(i=0;i<32;i++) { + if (reg_var_num(0)>i&&i>reg_var_num(max_reg_var)) { + printf("\tlw %s,%d($sp)\n",register_name(i),disp); + disp += SIZE_OF_INT; + } + } + return disp; +} + +static int +code_fmask_offset() +{ + int i; + int offset=0; + for(i=0;i<32;i++) { + if (freg_var_num(0)>i&&i>freg_var_num(max_reg_var)) { + offset++; + } + } + if (offset>2) offset-=1; + return -offset*SIZE_OF_FLOAT; +} + static unsigned int code_fmask() { int i; unsigned int mask=0; + /* used fregsister var */ for(i=0;i<32;i++) { - if (FREG_VAR_MIN<=i&&i<=FREG_VAR_MIN+max_freg_var) { + if (freg_var_num(0)>i&&i>freg_var_num(max_reg_var)) { mask |= (1<i&&i>freg_var_num(max_reg_var)) { + printf("\tsw %s,%d($sp)\n",register_name(i),disp); + disp += SIZE_OF_FLOAT; + } + } + return disp; +} + +static int +code_fregister_restore(reg_save,freg_save,disp) +{ + int i; + for(i=0;i<32;i++) { + if (freg_var_num(0)>i&&i>freg_var_num(max_reg_var)) { + printf("\tsw %s,%d($sp)\n",register_name(i),disp); + disp += SIZE_OF_FLOAT; + } + } + return disp; +} + void code_enter(char *name) { @@ -2424,7 +2523,6 @@ lvar_offset_label = 0; max_func_args = 0; - max_func_iargs = 0; } @@ -2455,7 +2553,7 @@ printf("\t.cpload $25\n"); printf("\t.set reorder\n"); printf("\tsubu $sp,$sp,$L_%d\n",-r1_offsetv); - printf("\t.cprestore %d\n",max_func_iargs); + printf("\t.cprestore %d\n",max_func_args); printf("\tj $L_%d\n",code_top_label); @@ -2471,14 +2569,12 @@ text_mode(); else printf("\t.align 2\n"); - printf(".ent %s\n",name); code_top_label = backdef(); r1_offset_label = fwdlabel(); lvar_offset_label = fwdlabel(); max_func_args = 0; - max_func_iargs = 0; } void @@ -2490,34 +2586,6 @@ set_freg(FREG_FREGISTER,0); } -static void -code_register_save(reg_save,freg_save,disp) -{ - int i; - for(i=REG_VAR_MIN;i<=max_reg_var;i++) { - printf("\tsw %s,%d($sp)\n",register_name(i),disp); - disp += SIZE_OF_INT; - } - for(i=FREG_VAR_MIN;i<=max_freg_var;i++) { - printf("\ts.s %s,%d($sp)\n",register_name(i),disp); - disp += SIZE_OF_FLOAT; - } -} - -static void -code_register_restore(reg_save,freg_save,disp) -{ - int i; - for(i=REG_VAR_MIN;i<=max_reg_var;i++) { - printf("\tlw %s,%d($sp)\n",register_name(i),disp); - disp += SIZE_OF_INT; - } - for(i=FREG_VAR_MIN;i<=max_freg_var;i++) { - printf("\tl.s %s,%d($sp)\n",register_name(i),disp); - disp += SIZE_OF_FLOAT; - } -} - #define round16(i) ((i+0xf)&~0xf) void @@ -2526,7 +2594,6 @@ int retcont1=0,sz; int r1_offsetv; int lvar_offsetv; - int nireg,nfreg; // if (max_freg_var>=0 && max_freg_var<=3) max_freg_var=3; reg_save = @@ -2566,9 +2633,6 @@ if (retcont) { fwddef(retcont1); } - if (max_freg_var>=0) { - } else { - } #if 0 fprintf(asi,"$L_%d=%d\n",r1_offset_label,0); fprintf(asi,"$L_%d=%d\n",lvar_offset_label,0); @@ -2576,41 +2640,44 @@ fprintf(asi,"$L_%d=%d\n",mask1_label,0); fprintf(asi,"$L_%d=0x%x\n",fmask_label ,code_fmask_label()); fprintf(asi,"$L_%d=%d\n",fmask1_label,0); - fprintf(asi,"$L_%d=%d\n",cprestore_label ,max_func_iargs); + fprintf(asi,"$L_%d=%d\n",cprestore_label ,max_func_args); #endif disp &= -SIZE_OF_INT; - r1_offsetv = disp; + r1_offsetv = round16(-disp) + + max_reg_var*SIZE_OF_INT+max_freg_var*SIZE_OF_FLOAT+ + round16(max_func_args); + printf(".set L_%d,%d\n",r1_offset_label,r1_offsetv); printf(".set L_%d,%d\n",lvar_offset_label,lvar_offsetv); - printf("\tmove $sp,$fp\n"); - code_register_restore(reg_save,freg_save,disp); + code_fregister_restore(code_register_restore(disp)); printf("\tlw $31,%d($sp)\n",-disp); printf("\tlw $fp,%d($sp)\n",-disp-4); printf("\taddu $sp,$sp,%d\n",r1_offsetv); printf("\tj $31\n"); printf("\t.align 2\n"); + printf(".ent %s\n",name); printf("%s:\n",name); - printf("\t.frame $fp,%d,$31\t",0); + printf("\t.frame $fp,%d,$31\t",r1_offsetv); printf("# vars= %d, regs= %d/%d, args= %d, extra= %d\n", round16(-disp), max_reg_var+2, max_freg_var, - round16(max_func_args*SIZE_OF_INT), + round16(max_func_args), 0 ); - printf("\t.mask 0x%x,%d\n",code_mask(),0); - printf("\t.fmask 0x%x,%d\n",code_fmask(),0); + printf("\t.mask 0x%x,%d\n",code_mask(),code_mask_offset()); + printf("\t.fmask 0x%x,%d\n",code_fmask(),code_fmask_offset()); printf("\t.set noreorder\n"); printf("\t.cpload $25\n"); printf("\t.set reorder\n"); - printf("\tsubu $sp,$sp,$L_%d\n",-r1_offsetv); - printf("\t.cprestore %d\n",max_func_args*SIZE_OF_INT); - code_register_save(reg_save,freg_save,disp); + printf("\tsubu $sp,$sp,%d\n",r1_offsetv); + printf("\t.cprestore %d\n",round16(max_func_args)); + code_fregister_save(code_register_save(disp)); printf("\tj $L_%d\n",code_top_label); local_table(); @@ -2640,8 +2707,10 @@ void code_set_fixed_creg(int reg,int mode,int type) { - if (type==FLOAT||type==DOUBLE) { + if (type==FLOAT) { set_freg(reg,mode); + } else if (type==DOUBLE) { + set_dreg(reg,mode); } else if (type==LONGLONG||type==ULONGLONG) { set_lreg(reg,mode); // use_reg(reg); @@ -2826,6 +2895,8 @@ printf("\t.type\t%s,@object\n",name); } +#define lib_args(max) if (max_func_args>= 3; + i1 >>= a; printf("code_assop 9 %d\n",i1); - ui1 += 3; + ui1 += a; printf("code_assop 1 %u\n",ui1); - ui1 -= 3; + ui1 -= a; printf("code_assop 2 %u\n",ui1); - ui1 /= 3; + ui1 /= a; printf("code_assop 3 %u\n",ui1); - ui1 *= 3; + ui1 *= a; printf("code_assop 4 %u\n",ui1); - ui1 |= 234; + ui1 |= a; printf("code_assop 5 %u\n",ui1); - ui1 &= 23234234; + ui1 &= a; printf("code_assop 6 %u\n",ui1); - ui1 ^= 55234234; + ui1 ^= a; printf("code_assop 7 %u\n",ui1); - ui1 <<= 3; + ui1 <<= a; printf("code_assop 8 %u\n",ui1); - ui1 >>= 3; + ui1 >>= a; printf("code_assop 9 %u\n",ui1); } @@ -574,46 +575,144 @@ { int i1,i2; unsigned int ui1,ui2; + int a = 3; + i1 = -555; i2= 555; + ui1 = 632423423; ui2= 32394234; + + i1 += a; + printf("code_assop 1 %d\n",i1); + i1 -= a; + printf("code_assop 2 %d\n",i1); + i1 /= a; + printf("code_assop 3 %d\n",i1); + i1 *= a; + printf("code_assop 4 %d\n",i1); + i1 |= a; + printf("code_assop 5 %d\n",i1); + i1 &= a; + printf("code_assop 6 %d\n",i1); + i1 ^= a; + printf("code_assop 7 %d\n",i1); + i1 <<= a; + printf("code_assop 8 %d\n",i1); + i1 >>= a; + printf("code_assop 9 %d\n",i1); + + ui1 += a; + printf("code_assop 1 %u\n",ui1); + ui1 -= a; + printf("code_assop 2 %u\n",ui1); + ui1 /= a; + printf("code_assop 3 %u\n",ui1); + ui1 *= a; + printf("code_assop 4 %u\n",ui1); + ui1 |= a; + printf("code_assop 5 %u\n",ui1); + ui1 &= a; + printf("code_assop 6 %u\n",ui1); + ui1 ^= a; + printf("code_assop 7 %u\n",ui1); + ui1 <<= a; + printf("code_assop 8 %u\n",ui1); + ui1 >>= a; + printf("code_assop 9 %u\n",ui1); +} + + +// code_register_assop(int e2,int op,int byte) +void +code_register_assop_const() +{ + register int i1; + register unsigned int ui1; + i1 = -555; + ui1 = 632423423; + + i1 += 3; + printf("code_assop c 1 %d\n",i1); + i1 -= 3; + printf("code_assop c 2 %d\n",i1); + i1 /= 3; + printf("code_assop c 3 %d\n",i1); + i1 *= 3; + printf("code_assop c 4 %d\n",i1); + i1 |= 234; + printf("code_assop c 5 %d\n",i1); + i1 &= 23244234; + printf("code_assop c 6 %d\n",i1); + i1 ^= 55244234; + printf("code_assop c 7 %d\n",i1); + i1 <<= 3; + printf("code_assop c 8 %d\n",i1); + i1 >>= 3; + printf("code_assop c 9 %d\n",i1); + + ui1 += 3; + printf("code_assop c 1 %u\n",ui1); + ui1 -= 3; + printf("code_assop c 2 %u\n",ui1); + ui1 /= 3; + printf("code_assop c 3 %u\n",ui1); + ui1 *= 3; + printf("code_assop c 4 %u\n",ui1); + ui1 |= 234; + printf("code_assop c 5 %u\n",ui1); + ui1 &= 23234234; + printf("code_assop c 6 %u\n",ui1); + ui1 ^= 55234234; + printf("code_assop c 7 %u\n",ui1); + ui1 <<= 3; + printf("code_assop c 8 %u\n",ui1); + ui1 >>= 3; + printf("code_assop c 9 %u\n",ui1); +} + +// code_assop(int op,int byte,int sign) +void +code_assop_const() +{ + int i1,i2; + unsigned int ui1,ui2; i1 = -555; i2= 555; ui1 = 632423423; ui2= 32394234; i1 += 3; - printf("code_assop 1 %d\n",i1); + printf("code_assop c 1 %d\n",i1); i1 -= 3; - printf("code_assop 2 %d\n",i1); + printf("code_assop c 2 %d\n",i1); i1 /= 3; - printf("code_assop 3 %d\n",i1); + printf("code_assop c 3 %d\n",i1); i1 *= 3; - printf("code_assop 4 %d\n",i1); + printf("code_assop c 4 %d\n",i1); i1 |= 234; - printf("code_assop 5 %d\n",i1); + printf("code_assop c 5 %d\n",i1); i1 &= 23234234; - printf("code_assop 6 %d\n",i1); + printf("code_assop c 6 %d\n",i1); i1 ^= 55444234; - printf("code_assop 7 %d\n",i1); + printf("code_assop c 7 %d\n",i1); i1 <<= 3; - printf("code_assop 8 %d\n",i1); + printf("code_assop c 8 %d\n",i1); i1 >>= 3; - printf("code_assop 9 %d\n",i1); + printf("code_assop c 9 %d\n",i1); ui1 += 3; - printf("code_assop 1 %u\n",ui1); + printf("code_assop c 1 %u\n",ui1); ui1 -= 3; - printf("code_assop 2 %u\n",ui1); + printf("code_assop c 2 %u\n",ui1); ui1 /= 3; - printf("code_assop 3 %u\n",ui1); + printf("code_assop c 3 %u\n",ui1); ui1 *= 3; - printf("code_assop 4 %u\n",ui1); + printf("code_assop c 4 %u\n",ui1); ui1 |= 234; - printf("code_assop 5 %u\n",ui1); + printf("code_assop c 5 %u\n",ui1); ui1 &= 23234234; - printf("code_assop 6 %u\n",ui1); + printf("code_assop c 6 %u\n",ui1); ui1 ^= 54234234; - printf("code_assop 7 %u\n",ui1); + printf("code_assop c 7 %u\n",ui1); ui1 <<= 3; - printf("code_assop 8 %u\n",ui1); + printf("code_assop c 8 %u\n",ui1); ui1 >>= 3; - printf("code_assop 9 %u\n",ui1); + printf("code_assop c 9 %u\n",ui1); } @@ -1248,23 +1347,17 @@ printf("ltosop 6 %lld\n",i); i = i1 ^ i2; printf("ltosop 7 %lld\n",i); - printf("ltosop uuu -2 %llu=%llu/%llu\n",u,u1,u2); i = i1 << i2; printf("ltosop 8 %lld\n",i); - printf("ltosop uuu -1 %llu=%llu/%llu\n",u,u1,u2); i = i1 >> i2; - printf("ltosop uuu 0 %llu=%llu/%llu\n",u,u1,u2); printf("ltosop 9 %lld\n",i); i = i1 % i2; - printf("ltosop uuu 0.0 %llu=%llu/%llu\n",u,u1,u2); printf("ltosop 10 %lld\n",i); - printf("ltosop uuu 1 %llu=%llu/%llu\n",u,u1,u2); u = u1 + u2; printf("ltosop u 1 %llu\n",u); u = u1 - u2; printf("ltosop u 2 %llu\n",u); - printf("ltosop uuu 2 %llu=%llu/%llu\n",u,u1,u2); u = u1 / u2; printf("ltosop u 3 %llu\n",u); u = u1 * u2; @@ -1303,7 +1396,6 @@ i = i1 % ii2; printf("litosop 10 %lld\n",i); - printf("litosop uuu %llu=%llu+%u\n",u,u1,uu2); u = u1 + uu2; printf("litosop u 1 %llu\n",u); u = u1 - uu2; @@ -1586,45 +1678,46 @@ { register long long i1; register unsigned long long ui1; + long long a = 3; i1 = -555; ui1 = 632423423; - i1 += 3; + i1 += a; printf("code_register_lassop 1 %lld\n",i1); - i1 -= 3; + i1 -= a; printf("code_register_lassop 2 %lld\n",i1); - i1 /= 3; + i1 /= a; printf("code_register_lassop 3 %lld\n",i1); - i1 *= 3; + i1 *= a; printf("code_register_lassop 4 %lld\n",i1); - i1 |= 234; + i1 |= a; printf("code_register_lassop 5 %lld\n",i1); - i1 &= 2324234234234234LL; + i1 &= a; printf("code_register_lassop 6 %lld\n",i1); - i1 ^= 5523234234234234LL; + i1 ^= a; printf("code_register_lassop 7 %lld\n",i1); - i1 <<= 3; + i1 <<= a; printf("code_register_lassop 8 %lld\n",i1); - i1 >>= 3; + i1 >>= a; printf("code_register_lassop 9 %lld\n",i1); - ui1 += 3; + ui1 += a; printf("code_register_lassop 1 %llu\n",ui1); - ui1 -= 3; + ui1 -= a; printf("code_register_lassop 2 %llu\n",ui1); - ui1 /= 3; + ui1 /= a; printf("code_register_lassop 3 %llu\n",ui1); - ui1 *= 3; + ui1 *= a; printf("code_register_lassop 4 %llu\n",ui1); - ui1 |= 234; + ui1 |= a; printf("code_register_lassop 5 %llu\n",ui1); - ui1 &= 2324234234234234LL; + ui1 &= a; printf("code_register_lassop 6 %llu\n",ui1); - ui1 ^= 5523234234234234LL; + ui1 ^= a; printf("code_register_lassop 7 %llu\n",ui1); - ui1 <<= 3; + ui1 <<= a; printf("code_register_lassop 8 %llu\n",ui1); - ui1 >>= 3; + ui1 >>= a; printf("code_register_lassop 9 %llu\n",ui1); } @@ -1634,46 +1727,143 @@ { long long i1,i2; unsigned long long ui1,ui2; + long long a = 3; + i1 = -555; i2= 555; + ui1 = 632423423; ui2= 32394234; + + i1 += a; + printf("code_lassop 1 %lld\n",i1); + i1 -= a; + printf("code_lassop 2 %lld\n",i1); + i1 /= a; + printf("code_lassop 3 %lld\n",i1); + i1 *= a; + printf("code_lassop 4 %lld\n",i1); + i1 |= a; + printf("code_lassop 5 %lld\n",i1); + i1 &= a; + printf("code_lassop 6 %lld\n",i1); + i1 ^= a; + printf("code_lassop 7 %lld\n",i1); + i1 <<= a; + printf("code_lassop 8 %lld\n",i1); + i1 >>= a; + printf("code_lassop 9 %lld\n",i1); + + ui1 += a; + printf("code_lassop 1 %llu\n",ui1); + ui1 -= a; + printf("code_lassop 2 %llu\n",ui1); + ui1 /= a; + printf("code_lassop 3 %llu\n",ui1); + ui1 *= a; + printf("code_lassop 4 %llu\n",ui1); + ui1 |= a; + printf("code_lassop 5 %llu\n",ui1); + ui1 &= a; + printf("code_lassop 6 %llu\n",ui1); + ui1 ^= a; + printf("code_lassop 7 %llu\n",ui1); + ui1 <<= a; + printf("code_lassop 8 %llu\n",ui1); + ui1 >>= a; + printf("code_lassop 9 %llu\n",ui1); +} + +// code_register_assop(int e2,int op,int byte) +void +code_register_lassop_const() +{ + register long long i1; + register unsigned long long ui1; + i1 = -555; + ui1 = 632423423; + + i1 += 3; + printf("code_register_lassop c 1 %lld\n",i1); + i1 -= 3; + printf("code_register_lassop c 2 %lld\n",i1); + i1 /= 3; + printf("code_register_lassop c 3 %lld\n",i1); + i1 *= 3; + printf("code_register_lassop c 4 %lld\n",i1); + i1 |= 234; + printf("code_register_lassop c 5 %lld\n",i1); + i1 &= 2324234234234234LL; + printf("code_register_lassop c 6 %lld\n",i1); + i1 ^= 5523234234234234LL; + printf("code_register_lassop c 7 %lld\n",i1); + i1 <<= 3; + printf("code_register_lassop c 8 %lld\n",i1); + i1 >>= 3; + printf("code_register_lassop c 9 %lld\n",i1); + + ui1 += 3; + printf("code_register_lassop c 1 %llu\n",ui1); + ui1 -= 3; + printf("code_register_lassop c 2 %llu\n",ui1); + ui1 /= 3; + printf("code_register_lassop c 3 %llu\n",ui1); + ui1 *= 3; + printf("code_register_lassop c 4 %llu\n",ui1); + ui1 |= 234; + printf("code_register_lassop c 5 %llu\n",ui1); + ui1 &= 2324234234234234LL; + printf("code_register_lassop c 6 %llu\n",ui1); + ui1 ^= 5523234234234234LL; + printf("code_register_lassop c 7 %llu\n",ui1); + ui1 <<= 3; + printf("code_register_lassop c 8 %llu\n",ui1); + ui1 >>= 3; + printf("code_register_lassop c 9 %llu\n",ui1); +} + +// code_lassop(int op,int byte,int sign) +void +code_lassop_const() +{ + long long i1,i2; + unsigned long long ui1,ui2; i1 = -555; i2= 555; ui1 = 632423423; ui2= 32394234; i1 += 3; - printf("code_lassop 1 %lld\n",i1); + printf("code_lassop c 1 %lld\n",i1); i1 -= 3; - printf("code_lassop 2 %lld\n",i1); + printf("code_lassop c 2 %lld\n",i1); i1 /= 3; - printf("code_lassop 3 %lld\n",i1); + printf("code_lassop c 3 %lld\n",i1); i1 *= 3; - printf("code_lassop 4 %lld\n",i1); + printf("code_lassop c 4 %lld\n",i1); i1 |= 234; - printf("code_lassop 5 %lld\n",i1); + printf("code_lassop c 5 %lld\n",i1); i1 &= 2324234234234234LL; - printf("code_lassop 6 %lld\n",i1); + printf("code_lassop c 6 %lld\n",i1); i1 ^= 5523234234234234LL; - printf("code_lassop 7 %lld\n",i1); + printf("code_lassop c 7 %lld\n",i1); i1 <<= 3; - printf("code_lassop 8 %lld\n",i1); + printf("code_lassop c 8 %lld\n",i1); i1 >>= 3; - printf("code_lassop 9 %lld\n",i1); + printf("code_lassop c 9 %lld\n",i1); ui1 += 3; - printf("code_lassop 1 %llu\n",ui1); + printf("code_lassop c 1 %llu\n",ui1); ui1 -= 3; - printf("code_lassop 2 %llu\n",ui1); + printf("code_lassop c 2 %llu\n",ui1); ui1 /= 3; - printf("code_lassop 3 %llu\n",ui1); + printf("code_lassop c 3 %llu\n",ui1); ui1 *= 3; - printf("code_lassop 4 %llu\n",ui1); + printf("code_lassop c 4 %llu\n",ui1); ui1 |= 234; - printf("code_lassop 5 %llu\n",ui1); + printf("code_lassop c 5 %llu\n",ui1); ui1 &= 2324234234234234LL; - printf("code_lassop 6 %llu\n",ui1); + printf("code_lassop c 6 %llu\n",ui1); ui1 ^= 5523234234234234LL; - printf("code_lassop 7 %llu\n",ui1); + printf("code_lassop c 7 %llu\n",ui1); ui1 <<= 3; - printf("code_lassop 8 %llu\n",ui1); + printf("code_lassop c 8 %llu\n",ui1); ui1 >>= 3; - printf("code_lassop 9 %llu\n",ui1); + printf("code_lassop c 9 %llu\n",ui1); } // code_lgt(int cond) diff -r 5aaca4f9d96b -r 8cd8d72286ae test/simp1.c --- a/test/simp1.c Wed May 12 21:44:45 2004 +0900 +++ b/test/simp1.c Fri May 14 20:57:52 2004 +0900 @@ -7,12 +7,14 @@ short s(short a,short b,short c,short d,short f) { + printf("s(%d,%d,%d,%d,%d)\n",a,b,c,d,f); return a+b+c+d+f; } char ch(char a,char b,char c,char d,char f) { + printf("ch(%d,%d,%d,%d,%d)\n",a,b,c,d,f); return a+b+c+d+f; } @@ -20,18 +22,21 @@ float f(float a,float b,float c,float d,float f) { + printf("f(%g,%g,%g,%g,%g)\n",a,b,c,d,f); return a+b+c+d+f; } double d(double a,double b,double c,double d,double f) { + printf("d(%g,%g,%g,%g,%g)\n",a,b,c,d,f); return a+b+c+d+f; } long long l(long long a,long long b,long long c,long long d,long long f) { + printf("l(%lld,%lld,%lld,%lld,%lld)\n",a,b,c,d,f); return a+b+c+d+f; }