fix detailed behavior of TGC_C
This commit is contained in:
@ -875,11 +875,8 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t load_address = *(X+rs1) + (int16_t)sext<12>(imm);
|
||||
if(traits::eei_aligned_addresses && (load_address & 0x1)) raise(0, 4);
|
||||
else {
|
||||
int16_t res = (int16_t)readSpace2(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm));
|
||||
if(rd != 0) *(X+rd) = res;
|
||||
}
|
||||
int16_t res = (int16_t)readSpace2(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm));
|
||||
if(rd != 0) *(X+rd) = res;
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -923,11 +920,8 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t load_address = *(X+rs1) + (int16_t)sext<12>(imm);
|
||||
if(traits::eei_aligned_addresses && (load_address & 0x3)) raise(0, 4);
|
||||
else {
|
||||
int32_t res = (int32_t)readSpace4(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm));
|
||||
if(rd != 0) *(X+rd) = (uint32_t)res;
|
||||
}
|
||||
int32_t res = (int32_t)readSpace4(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm));
|
||||
if(rd != 0) *(X+rd) = (uint32_t)res;
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -1015,11 +1009,8 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t load_address = *(X+rs1) + (int16_t)sext<12>(imm);
|
||||
if(traits::eei_aligned_addresses && (load_address & 0x1)) raise(0, 4);
|
||||
else {
|
||||
uint16_t res = (uint16_t)readSpace2(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm));
|
||||
if(rd != 0) *(X+rd) = res;
|
||||
}
|
||||
uint16_t res = (uint16_t)readSpace2(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm));
|
||||
if(rd != 0) *(X+rd) = res;
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -1104,8 +1095,7 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t store_address = *(X+rs1) + (int16_t)sext<12>(imm);
|
||||
if(traits::eei_aligned_addresses && (store_address & 0x1)) raise(0, 6);
|
||||
else writeSpace2(traits::MEM, store_address, (int16_t)*(X+rs2));
|
||||
writeSpace2(traits::MEM, store_address, (int16_t)*(X+rs2));
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -1149,8 +1139,7 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t store_address = *(X+rs1) + (int16_t)sext<12>(imm);
|
||||
if(traits::eei_aligned_addresses && (store_address & 0x3)) raise(0, 6);
|
||||
else writeSpace4(traits::MEM, store_address, *(X+rs2));
|
||||
writeSpace4(traits::MEM, store_address, *(X+rs2));
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -2929,8 +2918,7 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t load_address = *(X+(rs1 + 8)) + uimm;
|
||||
if(traits::eei_aligned_addresses && (load_address & 0x3)) raise(0, 4);
|
||||
else *(X+(rd + 8)) = (int32_t)readSpace4(traits::MEM, load_address);
|
||||
*(X+(rd + 8)) = (int32_t)readSpace4(traits::MEM, load_address);
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -2974,8 +2962,7 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t load_address = *(X+(rs1 + 8)) + uimm;
|
||||
if(traits::eei_aligned_addresses && (load_address & 0x3)) raise(0, 6);
|
||||
else writeSpace4(traits::MEM, load_address, *(X+(rs2 + 8)));
|
||||
writeSpace4(traits::MEM, load_address, *(X+(rs2 + 8)));
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
@ -3759,8 +3746,7 @@ private:
|
||||
try {
|
||||
if(rd) {
|
||||
uint32_t offs = *(X+2) + uimm;
|
||||
if(traits::eei_aligned_addresses && (offs & 0x3)) raise(0, 4);
|
||||
else *(X+rd) = (int32_t)readSpace4(traits::MEM, offs);
|
||||
*(X+rd) = (int32_t)readSpace4(traits::MEM, offs);
|
||||
}
|
||||
else raise(0, 2);
|
||||
} catch(...){}
|
||||
@ -4035,8 +4021,7 @@ private:
|
||||
try {
|
||||
{
|
||||
uint32_t offs = *(X+2) + uimm;
|
||||
if(traits::eei_aligned_addresses && (offs & 0x3)) raise(0, 4);
|
||||
else writeSpace4(traits::MEM, offs, (uint32_t)*(X+rs2));
|
||||
writeSpace4(traits::MEM, offs, (uint32_t)*(X+rs2));
|
||||
}
|
||||
} catch(...){}
|
||||
// post execution stuff
|
||||
|
Reference in New Issue
Block a user