From 7fc5ce56de24f506960bd193ee92381513e077ba Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Wed, 31 Jul 2013 18:21:23 +0200 Subject: [PATCH] Fix viim for x86, implement for ARM. --- Common/KeyMap.cpp | 38 +++++++++++++++++------------------ Core/MIPS/ARM/ArmCompVFPU.cpp | 12 ++++++++++- Core/MIPS/x86/CompVFPU.cpp | 5 +++-- UI/EmuScreen.cpp | 2 -- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/Common/KeyMap.cpp b/Common/KeyMap.cpp index da4e52c767..ef6a7e887e 100644 --- a/Common/KeyMap.cpp +++ b/Common/KeyMap.cpp @@ -85,25 +85,25 @@ struct DefaultKeyMap { static KeyMapping defaultShieldMap() { KeyMapping m; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_A)] = CTRL_CROSS; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_B)] = CTRL_CIRCLE; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_X)] = CTRL_SQUARE; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_Y)] = CTRL_TRIANGLE; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_START)] = CTRL_START; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_SELECT)] = CTRL_SELECT; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_L1)] = CTRL_LTRIGGER; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_R1)] = CTRL_RTRIGGER; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_R2)] = VIRTKEY_UNTHROTTLE; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_THUMBR)] = VIRTKEY_PAUSE; - m[KeyDef(DEVICE_ID_X360_0, KEYCODE_BUTTON_L2)] = VIRTKEY_SPEED_TOGGLE; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_X, -1)] = VIRTKEY_AXIS_X_MIN; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_X, +1)] = VIRTKEY_AXIS_X_MAX; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_Y, -1)] = VIRTKEY_AXIS_Y_MIN; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_Y, +1)] = VIRTKEY_AXIS_Y_MAX; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_HAT_X, -1)] = CTRL_LEFT; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_HAT_X, +1)] = CTRL_RIGHT; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_HAT_Y, -1)] = CTRL_UP; - m[AxisDef(DEVICE_ID_X360_0, JOYSTICK_AXIS_HAT_Y, +1)] = CTRL_DOWN; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_A)] = CTRL_CROSS; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_B)] = CTRL_CIRCLE; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_X)] = CTRL_SQUARE; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_Y)] = CTRL_TRIANGLE; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_START)] = CTRL_START; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_SELECT)] = CTRL_SELECT; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_L1)] = CTRL_LTRIGGER; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_R1)] = CTRL_RTRIGGER; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_R2)] = VIRTKEY_UNTHROTTLE; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_THUMBR)] = VIRTKEY_PAUSE; + m[KeyDef(DEVICE_ID_PAD_0, KEYCODE_BUTTON_L2)] = VIRTKEY_SPEED_TOGGLE; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_X, -1)] = VIRTKEY_AXIS_X_MIN; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_X, +1)] = VIRTKEY_AXIS_X_MAX; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_Y, -1)] = VIRTKEY_AXIS_Y_MIN; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_Y, +1)] = VIRTKEY_AXIS_Y_MAX; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_HAT_X, -1)] = CTRL_LEFT; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_HAT_X, +1)] = CTRL_RIGHT; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_HAT_Y, -1)] = CTRL_UP; + m[AxisDef(DEVICE_ID_PAD_0, JOYSTICK_AXIS_HAT_Y, +1)] = CTRL_DOWN; return m; } diff --git a/Core/MIPS/ARM/ArmCompVFPU.cpp b/Core/MIPS/ARM/ArmCompVFPU.cpp index 0807317279..828c50b1f3 100644 --- a/Core/MIPS/ARM/ArmCompVFPU.cpp +++ b/Core/MIPS/ARM/ArmCompVFPU.cpp @@ -1153,7 +1153,17 @@ namespace MIPSComp } void Jit::Comp_Viim(u32 op) { - DISABLE; + CONDITIONAL_DISABLE; + + u8 dreg; + GetVectorRegs(&dreg, V_Single, _VT); + + s32 imm = (s32)(s16)(u16)(op & 0xFFFF); + fpr.MapRegV(dreg, MAP_DIRTY | MAP_NOINIT); + MOVI2F(fpr.V(dreg), (float)imm, R0); + + ApplyPrefixD(&dreg, V_Single); + fpr.ReleaseSpillLocksAndDiscardTemps(); } void Jit::Comp_Vfim(u32 op) { diff --git a/Core/MIPS/x86/CompVFPU.cpp b/Core/MIPS/x86/CompVFPU.cpp index b7580f63d4..47208cd83a 100644 --- a/Core/MIPS/x86/CompVFPU.cpp +++ b/Core/MIPS/x86/CompVFPU.cpp @@ -1202,14 +1202,15 @@ void Jit::Comp_Vcmov(u32 op) { } void Jit::Comp_Viim(u32 op) { - DISABLE; CONDITIONAL_DISABLE; u8 dreg; GetVectorRegs(&dreg, V_Single, _VT); s32 imm = (s32)(s16)(u16)(op & 0xFFFF); - MOV(32, R(EAX), Imm32(imm)); + FP32 fp; + fp.f = (float)imm; + MOV(32, R(EAX), Imm32(fp.u)); fpr.MapRegV(dreg, MAP_DIRTY | MAP_NOINIT); MOVD_xmm(fpr.VX(dreg), R(EAX)); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index e8a2cd1f29..d1bd3e9afb 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -344,8 +344,6 @@ void EmuScreen::axis(const AxisInput &axis) { } void EmuScreen::processAxis(const AxisInput &axis, int direction) { - // ILOG("axis: %i %i %f", axis.deviceId, axis.axisId, axis.value); - int result = KeyMap::AxisToPspButton(axis.deviceId, axis.axisId, direction); if (result == KEYMAP_ERROR_UNKNOWN_KEY) return;