Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define LUAVM_DAX_ME 0x1C6B438
- #define LUAVM_DAX_AO 0x1A7D575
- #define LUAVM_DAX_MO 0x1451AFB
- static uint32_t rbxDaxEncodeOp(uint32_t x, uint32_t mulEven, uint32_t addEven, uint32_t mulOdd, uint32_t addOdd)
- {
- uint32_t result = 0;
- uint32_t mask = 1;
- for (size_t i = 0; i < 8*sizeof(uint32_t); ++i)
- {
- uint32_t bitDesired = mask & x;
- uint32_t bitOdd = mask & (result*mulOdd + addOdd);
- uint32_t bitEven = mask & (result*mulEven + addEven);
- if ((bitEven ^ bitOdd) != bitDesired)
- {
- result |= mask;
- }
- mask <<= 1;
- }
- return result;
- }
- unsigned int DaxTranslateCode(unsigned int i, int pc, unsigned int key){
- Instruction enc = i;
- BYTE op = GET_OPCODE(i);
- switch(op){
- case OP_CALL:
- case OP_TAILCALL:
- case OP_RETURN:
- case OP_CLOSURE:
- enc = rbxDaxEncodeOp(i, LUAVM_DAX_ME, pc, LUAVM_DAX_MO, LUAVM_DAX_AO);
- SET_OPCODE(enc, GET_OPCODE(i));
- break;
- case OP_MOVE:
- SETARG_C(enc, (PC | 1));
- default:
- break;
- }
- return LUAVM_ENCODEINSN(enc, key);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement