some opts
This commit is contained in:
@@ -41,47 +41,35 @@ function ord(c, b) {
|
||||
return int(TGL_ORD[c])
|
||||
}
|
||||
|
||||
function bw_and(a, b, v, r) {
|
||||
v = 1; r = 0
|
||||
a = int(a)
|
||||
b = int(b)
|
||||
function bw_and(a, b, v, r) {
|
||||
v = 1; r = 0; a = int(a); b = int(b)
|
||||
if(a < 0) a += 4294967296
|
||||
if(b < 0) b += 4294967296
|
||||
while(a > 0 || b > 0) {
|
||||
if((a%2) == 1 && (b%2) == 1) r += v
|
||||
a = int(a/2)
|
||||
b = int(b/2)
|
||||
v *= 2
|
||||
a = int(a/2); b = int(b/2); v *= 2
|
||||
}
|
||||
return int(r)
|
||||
}
|
||||
|
||||
function bw_or(a, b, v, r) {
|
||||
v = 1; r = 0
|
||||
a = int(a)
|
||||
b = int(b)
|
||||
function bw_or(a, b, v, r) {
|
||||
v = 1; r = 0; a = int(a); b = int(b)
|
||||
if(a < 0) a += 4294967296
|
||||
if(b < 0) b += 4294967296
|
||||
while(a > 0 || b > 0) {
|
||||
if((a%2) == 1 || (b%2) == 1) r += v
|
||||
a = int(a/2)
|
||||
b = int(b/2)
|
||||
v *= 2
|
||||
a = int(a/2); b = int(b/2); v *= 2
|
||||
}
|
||||
return int(r)
|
||||
}
|
||||
|
||||
function bw_xor(a, b, v, r) {
|
||||
v = 1; r = 0
|
||||
a = int(a)
|
||||
b = int(b)
|
||||
function bw_xor(a, b, v, r) {
|
||||
v = 1; r = 0; a = int(a); b = int(b)
|
||||
if(a < 0) a += 4294967296
|
||||
if(b < 0) b += 4294967296
|
||||
while(a > 0 || b > 0) {
|
||||
if((a%2) != (b%2)) r += v
|
||||
a = int(a/2)
|
||||
b = int(b/2)
|
||||
v *= 2
|
||||
a = int(a/2); b = int(b/2); v *= 2
|
||||
}
|
||||
return int(r)
|
||||
}
|
||||
@@ -194,9 +182,7 @@ function amach_branch(f3, rs1, rs2, immval, r1, r2, ur1, ur2, taken) {
|
||||
else if(f3 == 6) taken = (ur1 < ur2)
|
||||
else if(f3 == 7) taken = (ur1 >= ur2)
|
||||
else trapout(sprintf("Illegal instruction at 0x%X", pc-4))
|
||||
|
||||
if(taken) pc += immval
|
||||
else pc += 4
|
||||
pc += (taken ? immval : 4)
|
||||
}
|
||||
|
||||
function amach_imm(opcode, f3, rd, rs1, immval, r1, ur1, base, shamt, val) {
|
||||
@@ -263,9 +249,7 @@ function amach_atomic(f3, f5, aq, rl, rd, rs1, rs2, r1, r2, val, uval, ur2) {
|
||||
write_word(r1, r2)
|
||||
setreg(rd, 0)
|
||||
RES_ADDR = -1
|
||||
} else {
|
||||
setreg(rd, 1)
|
||||
}
|
||||
} else setreg(rd, 1)
|
||||
} else if(f5 == 4) { # amoxor.w
|
||||
setreg(rd, val)
|
||||
write_word(r1, bw_xor(val, r2))
|
||||
@@ -326,7 +310,6 @@ function amach_exec(instr, opcode, rd, rs1, rs2, imm, funct3, funct7) {
|
||||
} else if(opcode == 23) { # 0x17, AUIPC, type U
|
||||
setreg(rd, imm * 4096 + pc - 4)
|
||||
} else if(opcode == 15) { # 0x0F, FENCE, type I / no-op
|
||||
# no-op
|
||||
} else trapout(sprintf("Illegal instruction at 0x%X", pc-4))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user