Add helper proc to clean up the word/byte keyword
This commit is contained in:
parent
460e1a8700
commit
3dca2254e1
@ -143,6 +143,11 @@ get_i16 :: proc(data: []u8) -> i16 {
|
|||||||
return (i16)(data[1]) << 8 | (i16)(data[0])
|
return (i16)(data[1]) << 8 | (i16)(data[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operand_is :: proc($T: typeid, opr: Operand) -> bool {
|
||||||
|
_, ok := opr.(T)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
calculate_effective_address :: proc(r_m: u8) -> string {
|
calculate_effective_address :: proc(r_m: u8) -> string {
|
||||||
val: string
|
val: string
|
||||||
switch r_m {
|
switch r_m {
|
||||||
@ -527,13 +532,11 @@ main :: proc() {
|
|||||||
src_opr = parse_operand(inst, inst.src, data[idx:], &processed, word, has_segment)
|
src_opr = parse_operand(inst, inst.src, data[idx:], &processed, word, has_segment)
|
||||||
|
|
||||||
// TODO: This is ugly as hell
|
// TODO: This is ugly as hell
|
||||||
_,ok_1 := src_opr.(Immediate8)
|
is_imm := operand_is(Immediate8, src_opr) || operand_is(Immediate16, src_opr)
|
||||||
_,ok_2 := src_opr.(Immediate16)
|
is_bracketed := operand_is(MemoryAddr, dst_opr) || operand_is(DirectAddress, dst_opr)
|
||||||
_,ok_3 := dst_opr.(MemoryAddr);
|
|
||||||
_,ok_4 := dst_opr.(DirectAddress);
|
|
||||||
shiftrot := inst.src == .ShiftRotate
|
shiftrot := inst.src == .ShiftRotate
|
||||||
size_string := ""
|
size_string := ""
|
||||||
if ((ok_1 || ok_2) && (ok_3 || ok_4)) || ((ok_3 || ok_4) && shiftrot) {
|
if ((is_imm && is_bracketed) || (is_bracketed && shiftrot)) {
|
||||||
size_string = word ? "word " : "byte "
|
size_string = word ? "word " : "byte "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user