This commit is contained in:
Annie
2025-05-06 17:34:00 -04:00
parent 8bba742c99
commit 0a5b6ee7fb
3 changed files with 22 additions and 11 deletions

View File

@ -548,7 +548,7 @@ int generateIfTrue(Instruction *inst) {
return -1; return -1;
} }
fprintf(cg_flag, "\tcmpl\t$0, %d(%%rbp)\t#if true start\n", getAddress(cg)); fprintf(cg_flag, "\tcmpb\t$0, %d(%%rbp)\t#if true start\n", getAddress(cg));
fprintf(cg_flag, "\tjne\t.L%d\t\t#if true end\n", getLabel(inst)); fprintf(cg_flag, "\tjne\t.L%d\t\t#if true end\n", getLabel(inst));
} }
@ -642,6 +642,7 @@ int generateEqualTo(Instruction *inst) {
fprintf(cg_flag, "\tmovl\t%d(%%rbp), %%eax\t#equal to start\n", getAddress(op1CG)); fprintf(cg_flag, "\tmovl\t%d(%%rbp), %%eax\t#equal to start\n", getAddress(op1CG));
fprintf(cg_flag, "\tcmpl\t%d(%%rbp), %%eax\n", getAddress(op2CG)); fprintf(cg_flag, "\tcmpl\t%d(%%rbp), %%eax\n", getAddress(op2CG));
fprintf(cg_flag, "\tsete\t%%al\n"); fprintf(cg_flag, "\tsete\t%%al\n");
fprintf(cg_flag, "\tmovb\t$0, %d(%%rbp)\n", getAddress(cg));
fprintf(cg_flag, "\tmovb\t%%al, %d(%%rbp)\t#equal to end\n", getAddress(cg)); fprintf(cg_flag, "\tmovb\t%%al, %d(%%rbp)\t#equal to end\n", getAddress(cg));
return 0; return 0;
} }

View File

@ -627,6 +627,8 @@ int getConst(TNodeOrConst *tnc) {
return tnc->tnc_union->character; return tnc->tnc_union->character;
} else if (tnc->d == BOOLEAN) { } else if (tnc->d == BOOLEAN) {
return tnc->tnc_union->Boolean; return tnc->tnc_union->Boolean;
} else if (tnc->d == ADDRESS) {
return 0;
} }
return -1; return -1;
} }

View File

@ -6,26 +6,34 @@ function entry : string2integer
function Fib : integer2integer function Fib : integer2integer
Fib(i) := { Fib(i) := {
[ Boolean: a ; Boolean: b ; Boolean: c] [integer: a; integer: b ; Boolean: d ; integer: c]
if( i = 0 ) then { (*if( i = 0 ) then {
return 7; return 7;
} else { } else {
i := i; i := i;
} }*)
(*b := b | (a & c); (*b := b | (a & c);
b := 2 < 3;*) b := 2 < 3;*)
if(i = 1) then {
i := printCharacter('a'); (* `if(i = 1) then { return 1; } else {
return 1; return Fib(i - 1) + Fib(i - 2);
} else {
return i + Fib(i - 1);
} }
*)
a := 0;
b := 1;
while(0 < i) {
c := a + b;
a := b;
b := c;
}
return c;
} }
entry (arg) := { entry (arg) := {
[ integer: x; integer: y ] [ integer: x; integer: y ]
x := 2; x := 2;
x := Fib(2); (* x := Fib(2);*)
y := printInteger(Fib(2)); y := printInteger(Fib(3));
return 1; return 1;
} }