diff --git a/ext/disarm.cpp b/ext/disarm.cpp index ffa111fe18..5bef319c71 100644 --- a/ext/disarm.cpp +++ b/ext/disarm.cpp @@ -96,7 +96,7 @@ int GetVd(uint32_t op, bool quad = false, bool dbl = false) { if (!quad && !dbl) { val = ((op >> 22) & 1) | ((op >> 11) & 0x1E); } else { - val = ((op >> 18) & 0x10) | ((op >> 12) & 0xF); + val = ((op >> 18) & 0x10) | ((op >> 12) & 0xF); } if (quad) val >>= 1; @@ -295,67 +295,67 @@ bool DisasmVFP(uint32_t op, char *text) { #endif return false; } - -static const char *GetSizeString(int sz) { - switch (sz) { - case 0: - return "8"; - case 1: - return "16"; - case 2: - return "32"; - case 3: - return "64"; - default: - return "(err)"; - } -} - -static const char *GetISizeString(int sz) { - switch (sz) { - case 0: - return "i8"; - case 1: - return "i16"; - case 2: - return "i32"; - case 3: - return "i64"; - default: - return "(err)"; - } -} - -static int GetRegCount(int type) { - switch (type) { - case 7: return 1; - case 10: return 2; - case 6: return 3; - case 4: return 4; - default: - return 0; - } -} - -// VLD1 / VST1 -static bool DisasmNeonLDST(uint32_t op, char *text) { - bool load = (op >> 21) & 1; - int Rn = (op >> 16) & 0xF; - int Rm = (op & 0xF); - int Vd = GetVd(op, false, true); - int sz = (op >> 6) & 3; - int regCount = GetRegCount((op >> 8) & 0xF); - - int startReg = Vd; - int endReg = Vd + regCount - 1; - - if (startReg == endReg) - sprintf(text, "V%s1.%s {d%i}, [r%i]", load ? "LD" : "ST", GetSizeString(sz), startReg, Rn); - else - sprintf(text, "V%s1.%s {d%i-d%i}, [r%i]", load ? "LD" : "ST", GetSizeString(sz), startReg, endReg, Rn); - - return true; -} + +static const char *GetSizeString(int sz) { + switch (sz) { + case 0: + return "8"; + case 1: + return "16"; + case 2: + return "32"; + case 3: + return "64"; + default: + return "(err)"; + } +} + +static const char *GetISizeString(int sz) { + switch (sz) { + case 0: + return "i8"; + case 1: + return "i16"; + case 2: + return "i32"; + case 3: + return "i64"; + default: + return "(err)"; + } +} + +static int GetRegCount(int type) { + switch (type) { + case 7: return 1; + case 10: return 2; + case 6: return 3; + case 4: return 4; + default: + return 0; + } +} + +// VLD1 / VST1 +static bool DisasmNeonLDST(uint32_t op, char *text) { + bool load = (op >> 21) & 1; + int Rn = (op >> 16) & 0xF; + int Rm = (op & 0xF); + int Vd = GetVd(op, false, true); + int sz = (op >> 6) & 3; + int regCount = GetRegCount((op >> 8) & 0xF); + + int startReg = Vd; + int endReg = Vd + regCount - 1; + + if (startReg == endReg) + sprintf(text, "V%s1.%s {d%i}, [r%i]", load ? "LD" : "ST", GetSizeString(sz), startReg, Rn); + else + sprintf(text, "V%s1.%s {d%i-d%i}, [r%i]", load ? "LD" : "ST", GetSizeString(sz), startReg, endReg, Rn); + + return true; +} static bool DisasmNeonF3(uint32_t op, char *text) { sprintf(text, "NEON F3");