https://bugs.winehq.org/show_bug.cgi?id=48988
--- Comment #10 from Etaash Mathamsetty etaash.mathamsetty@gmail.com --- I made a probably terrible implementation of this instruction, feedback is appreciated!
case 0x38: case 0x39: {
BYTE *data = INSTR_GetOperandAddr(context, instr + 1, prefixlen + 1, long_addr, rex, segprefix, &len); BYTE* data2 = INSTR_GetOperandAddr(context, instr + 2, prefixlen + 2, long_addr, rex, segprefix, &len); SIZE_T offset = data - user_shared_data; SIZE_T data_size = get_op_size( long_op, rex );
if(offset <= KSHARED_USER_DATA_PAGE_SIZE - data_size) {
FIXME("data 1 = %llx data 2 = %llx\n", data, data2); //clear ZF and CF context->EFlags &= ~(1UL << 6); context->EFlags &= ~(1UL);
if( *(wine_user_shared_data + offset) == *data2) context->EFlags |= (1 << 6); else if(*(wine_user_shared_data + offset) < *data2) context->EFlags |= (1);
context->Rip += prefixlen + len + 1; return ExceptionContinueExecution; } break; }