Mercurial > hg > CbC > old > device
changeset 220:97246ddfe8ab
*** empty log message ***
author | kono |
---|---|
date | Sun, 25 Apr 2004 19:03:04 +0900 |
parents | 6190d24e178c |
children | ceae585186d9 |
files | Changes mc-code-powerpc.c mc-codegen.c mc.h |
diffstat | 4 files changed, 21 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Sun Apr 25 18:32:30 2004 +0900 +++ b/Changes Sun Apr 25 19:03:04 2004 +0900 @@ -3987,3 +3987,11 @@ (6) 生成したコードが正しいかどうかを調べる で、(4) までできました。 + +やっぱり、use_int とかって、なんとなくだめ。だめな +理由があるんだろうなぁ。ほとんどバグはここから +来るんだものね。 + +use_int とかは、codegen でやったんじゃいけなくて、 +もっとも下のcode生成部分でやらないといけないんじゃない? +それでいいのか?
--- a/mc-code-powerpc.c Sun Apr 25 18:32:30 2004 +0900 +++ b/mc-code-powerpc.c Sun Apr 25 19:03:04 2004 +0900 @@ -580,17 +580,14 @@ int h,l,i; i = get_lregister0(); if (i==-1) return -1; - if (regs[i]==0) { - h = get_register(); - if (h==-1) return -1; - regv_h(i) = h; - l = get_register(); - if (l==-1) { free_register(h); return -1; } - regv_l(i) = l; - regs[i]=USING_REG; - return i; - } - return -1; + h = get_register(); + if (h==-1) return -1; + regv_h(i) = h; + l = get_register(); + if (l==-1) { free_register(h); return -1; } + regv_l(i) = l; + regs[i]=USING_REG; + return i; } int
--- a/mc-codegen.c Sun Apr 25 18:32:30 2004 +0900 +++ b/mc-codegen.c Sun Apr 25 19:03:04 2004 +0900 @@ -1399,15 +1399,16 @@ return; case DREGISTER: case FREGISTER: + if (d) creg = use_double(creg); else creg = use_float(creg); g_expr(e4); if (creg!=cadr(e2)) { - if (d) creg = use_double(creg); else creg = use_float(creg); code_dassign_dregister(cadr(e2),d,creg); } return; } g_expr(e2); emit_push(); + if (d) creg = use_double(creg); else creg = use_float(creg); g_expr(e4); e2 = emit_pop(0); code_dassign(e2,creg,d); @@ -1482,15 +1483,16 @@ code_lassign_lvar(cadr(e2),creg); return; case LREGISTER: + creg = use_longlong(creg); g_expr(e4); if (creg!=cadr(e2)) { - creg = use_longlong(creg); code_lassign_lregister(cadr(e2),creg); } return; } g_expr(e2); emit_push(); + creg = use_longlong(creg); g_expr(e4); e2 = emit_pop(0); code_lassign(e2,creg);