Various bizarreness to get Linux working again.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2354 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-12-17 22:27:02 +00:00
parent 820c9c10ee
commit 7af22987b0
4 changed files with 34 additions and 15 deletions

View File

@ -321,6 +321,10 @@ static void __fastcall fUNPACK_V4_5(u32 *dest, u32 *data)
#define _upk (UNPACKFUNCTYPE) #define _upk (UNPACKFUNCTYPE)
#define _odd (UNPACKFUNCTYPE_ODD) #define _odd (UNPACKFUNCTYPE_ODD)
#define _unpk_s(bits) (UNPACKFUNCTYPE_S##bits)
#define _odd_s(bits) (UNPACKFUNCTYPE_ODD_S##bits)
#define _unpk_u(bits) (UNPACKFUNCTYPE_U##bits)
#define _odd_u(bits) (UNPACKFUNCTYPE_ODD_U##bits)
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// Main table for function unpacking. // Main table for function unpacking.
@ -331,16 +335,16 @@ static void __fastcall fUNPACK_V4_5(u32 *dest, u32 *data)
// 32-bits versions are unsigned-only!! // 32-bits versions are unsigned-only!!
#define UnpackFuncPair32( sizefac, vt, doMask ) \ #define UnpackFuncPair32( sizefac, vt, doMask ) \
_upk fUNPACK_##vt<doMask, sizefac, u32>, \ (UNPACKFUNCTYPE)_unpk_u(32) fUNPACK_##vt<doMask, sizefac, u32>, \
_upk fUNPACK_##vt<doMask, sizefac, u32>, \ (UNPACKFUNCTYPE)_unpk_u(32) fUNPACK_##vt<doMask, sizefac, u32>, \
_odd UNPACK_##vt<doMask, u32>, \ (UNPACKFUNCTYPE_ODD)_odd_u(32) UNPACK_##vt<doMask, u32>, \
_odd UNPACK_##vt<doMask, u32>, (UNPACKFUNCTYPE_ODD)_odd_u(32) UNPACK_##vt<doMask, u32>,
#define UnpackFuncPair( sizefac, vt, bits, doMask ) \ #define UnpackFuncPair( sizefac, vt, bits, doMask ) \
_upk fUNPACK_##vt<doMask, sizefac, u##bits>, \ (UNPACKFUNCTYPE)_unpk_u(bits) fUNPACK_##vt<doMask, sizefac, u##bits>, \
_upk fUNPACK_##vt<doMask, sizefac, s##bits>, \ (UNPACKFUNCTYPE)_unpk_s(bits) fUNPACK_##vt<doMask, sizefac, s##bits>, \
_odd UNPACK_##vt<doMask, u##bits>, \ (UNPACKFUNCTYPE_ODD)_odd_u(bits) UNPACK_##vt<doMask, u##bits>, \
_odd UNPACK_##vt<doMask, s##bits>, (UNPACKFUNCTYPE_ODD)_odd_s(bits) UNPACK_##vt<doMask, s##bits>,
#define UnpackFuncSet( doMask ) \ #define UnpackFuncSet( doMask ) \
{ UnpackFuncPair32( 4, S, doMask ) /* 0x0 - S-32 */ \ { UnpackFuncPair32( 4, S, doMask ) /* 0x0 - S-32 */ \
@ -374,8 +378,8 @@ static void __fastcall fUNPACK_V4_5(u32 *dest, u32 *data)
{ UnpackFuncPair ( 4, V4, 8, doMask ) /* 0xE - V4-8 */ \ { UnpackFuncPair ( 4, V4, 8, doMask ) /* 0xE - V4-8 */ \
12, 1, 4, 4 }, \ 12, 1, 4, 4 }, \
{ /* 0xF - V4-5 */ \ { /* 0xF - V4-5 */ \
_upk fUNPACK_V4_5<doMask>, _upk fUNPACK_V4_5<doMask>, \ (UNPACKFUNCTYPE)_unpk_u(32) fUNPACK_V4_5<doMask>, (UNPACKFUNCTYPE)_unpk_u(32) fUNPACK_V4_5<doMask>, \
_odd UNPACK_V4_5<doMask>, _odd UNPACK_V4_5<doMask>, \ (UNPACKFUNCTYPE_ODD)_odd_u(32) UNPACK_V4_5<doMask>, (UNPACKFUNCTYPE_ODD)_odd_u(32) UNPACK_V4_5<doMask>, \
6, 2, 2, 4 }, 6, 2, 2, 4 },
const __aligned16 VIFUnpackFuncTable VIFfuncTable[32] = const __aligned16 VIFUnpackFuncTable VIFfuncTable[32] =

View File

@ -33,13 +33,28 @@ typedef void (__fastcall *UNPACKFUNCTYPE)(u32 *dest, u32 *data);
typedef void (__fastcall *UNPACKFUNCTYPE_ODD)(u32 *dest, u32 *data, int size); typedef void (__fastcall *UNPACKFUNCTYPE_ODD)(u32 *dest, u32 *data, int size);
typedef int (*UNPACKPARTFUNCTYPESSE)(u32 *dest, u32 *data, int size); typedef int (*UNPACKPARTFUNCTYPESSE)(u32 *dest, u32 *data, int size);
#define create_unpack_u_type(bits) typedef void (__fastcall *UNPACKFUNCTYPE_U##bits)(u32 *dest, u##bits *data);
#define create_unpack_odd_u_type(bits) typedef void (__fastcall *UNPACKFUNCTYPE_ODD_U##bits)(u32 *dest, u##bits *data, int size);
#define create_unpack_s_type(bits) typedef void (__fastcall *UNPACKFUNCTYPE_S##bits)(u32 *dest, s##bits *data);
#define create_unpack_odd_s_type(bits) typedef void (__fastcall *UNPACKFUNCTYPE_ODD_S##bits)(u32 *dest, s##bits *data, int size);
#define create_some_unpacks(bits) \
create_unpack_u_type(bits); \
create_unpack_odd_u_type(bits); \
create_unpack_s_type(bits); \
create_unpack_odd_s_type(bits);
create_some_unpacks(32);
create_some_unpacks(16);
create_some_unpacks(8);
struct VIFUnpackFuncTable struct VIFUnpackFuncTable
{ {
UNPACKFUNCTYPE funcU; UNPACKFUNCTYPE funcU;
UNPACKFUNCTYPE funcS; UNPACKFUNCTYPE funcS;
UNPACKFUNCTYPE_ODD oddU; // needed for old-style vif only, remove when old vif is removed. UNPACKFUNCTYPE_ODD oddU; // needed for old-style vif only, remove when old vif is removed.
UNPACKFUNCTYPE_ODD oddS; // needed for old-style vif only, remove when old vif is removed. UNPACKFUNCTYPE_ODD oddS; // needed for old-style vif only, remove when old vif is removed.
u8 bsize; // currently unused u8 bsize; // currently unused
u8 dsize; // byte size of one channel u8 dsize; // byte size of one channel

View File

@ -20,7 +20,6 @@
#include "x86emitter/x86emitter.h" #include "x86emitter/x86emitter.h"
using namespace x86Emitter; using namespace x86Emitter;
extern void mVUmergeRegs(int dest, int src, int xyzw, bool modXYZW = 0); extern void mVUmergeRegs(int dest, int src, int xyzw, bool modXYZW = 0);
extern void _nVifUnpack(int idx, u8 *data, u32 size);
typedef u32 (__fastcall *nVifCall)(void*, void*); typedef u32 (__fastcall *nVifCall)(void*, void*);

View File

@ -20,6 +20,7 @@
#pragma once #pragma once
static __aligned16 nVifStruct nVif[2]; static __aligned16 nVifStruct nVif[2];
static _f void _nVifUnpack(int idx, u8 *data, u32 size);
int nVifUnpack(int idx, u32 *data) { int nVifUnpack(int idx, u32 *data) {
XMMRegisters::Freeze(); XMMRegisters::Freeze();