Fix bug in loading values into variables
This commit is contained in:
parent
7fe6a34613
commit
c2b396b853
|
@ -348,11 +348,11 @@ int AsLdVar(int ID) {
|
||||||
switch(Symbols[ID].Type) {
|
switch(Symbols[ID].Type) {
|
||||||
case RET_CHAR:
|
case RET_CHAR:
|
||||||
// movzbq zeroes, then moves a byte into the quad register
|
// movzbq zeroes, then moves a byte into the quad register
|
||||||
fprintf(OutputFile, "\tmovzbq\t%s(\%%rip), %s\n", Symbols[ID].Name, Registers[Reg]);
|
fprintf(OutputFile, "\tmovb\t%s(\%%rip), %s\n", Symbols[ID].Name, ByteRegisters[Reg]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RET_INT:
|
case RET_INT:
|
||||||
fprintf(OutputFile, "\tmovzbl\t%s(\%%rip), %s\n", Symbols[ID].Name, Registers[Reg]);
|
fprintf(OutputFile, "\tmovl\t%s(\%%rip), %s\n", Symbols[ID].Name, DoubleRegisters[Reg]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RET_LONG:
|
case RET_LONG:
|
||||||
|
@ -367,29 +367,27 @@ int AsLdVar(int ID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int AsStrVar(int Register, int ID) {
|
int AsStrVar(int Register, int ID) {
|
||||||
int Reg = RetrieveRegister();
|
|
||||||
|
|
||||||
printf("\tStoring contents of %s into %s\n", Registers[Register], Symbols[ID].Name);
|
printf("\tStoring contents of %s into %s\n", Registers[Register], Symbols[ID].Name);
|
||||||
|
|
||||||
switch(Symbols[ID].Type) {
|
switch(Symbols[ID].Type) {
|
||||||
case RET_CHAR:
|
case RET_CHAR:
|
||||||
// movzbq zeroes, then moves a byte into the quad register
|
// movzbq zeroes, then moves a byte into the quad register
|
||||||
fprintf(OutputFile, "\tmovb\t%s, %s(\%%rip)\n", ByteRegisters[Reg], Symbols[ID].Name);
|
fprintf(OutputFile, "\tmovb\t%s, %s(\%%rip)\n", ByteRegisters[Register], Symbols[ID].Name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RET_INT:
|
case RET_INT:
|
||||||
fprintf(OutputFile, "\tmovl\t%s, %s(\%%rip)\n", DoubleRegisters[Reg], Symbols[ID].Name);
|
fprintf(OutputFile, "\tmovl\t%s, %s(\%%rip)\n", DoubleRegisters[Register], Symbols[ID].Name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RET_LONG:
|
case RET_LONG:
|
||||||
fprintf(OutputFile, "\tmovq\t%s, %s(%%rip)\n", Registers[Reg], Symbols[ID].Name);
|
fprintf(OutputFile, "\tmovq\t%s, %s(%%rip)\n", Registers[Register], Symbols[ID].Name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DieMessage("Bad type for saving", Types[Symbols[ID].Type]);
|
DieMessage("Bad type for saving", Types[Symbols[ID].Type]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Reg;
|
return Register;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsNewSymb(int ID) {
|
void AsNewSymb(int ID) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user