mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-25 00:04:49 +02:00
84 lines
2.5 KiB
C++
84 lines
2.5 KiB
C++
// Copyright (c) 2012- PPSSPP Project.
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, version 2.0 or later versions.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License 2.0 for more details.
|
|
|
|
// A copy of the GPL 2.0 should have been included with the program.
|
|
// If not, see http://www.gnu.org/licenses/
|
|
|
|
// Official git repository and contact information can be found at
|
|
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
|
|
|
|
|
// Optimization ideas:
|
|
//
|
|
// It's common to see sequences of stores writing or reading to a contiguous set of
|
|
// addresses in function prologues/epilogues:
|
|
// sw s5, 104(sp)
|
|
// sw s4, 100(sp)
|
|
// sw s3, 96(sp)
|
|
// sw s2, 92(sp)
|
|
// sw s1, 88(sp)
|
|
// sw s0, 84(sp)
|
|
// sw ra, 108(sp)
|
|
// mov s4, a0
|
|
// mov s3, a1
|
|
// ...
|
|
// Such sequences could easily be detected and turned into nice contiguous
|
|
// sequences of ARM stores instead of the current 3 instructions per sw/lw.
|
|
//
|
|
// Also, if we kept track of the likely register content of a cached register,
|
|
// (pointer or data), we could avoid many BIC instructions.
|
|
|
|
|
|
#include "Core/MemMap.h"
|
|
#include "Core/Config.h"
|
|
#include "Core/MIPS/MIPS.h"
|
|
#include "Core/MIPS/MIPSAnalyst.h"
|
|
#include "Core/MIPS/MIPSCodeUtils.h"
|
|
#include "Core/MIPS/ARM64/Arm64Jit.h"
|
|
#include "Core/MIPS/ARM64/Arm64RegCache.h"
|
|
|
|
#define _RS MIPS_GET_RS(op)
|
|
#define _RT MIPS_GET_RT(op)
|
|
#define _RD MIPS_GET_RD(op)
|
|
#define _FS MIPS_GET_FS(op)
|
|
#define _FT MIPS_GET_FT(op)
|
|
#define _FD MIPS_GET_FD(op)
|
|
#define _SA MIPS_GET_SA(op)
|
|
#define _POS ((op>> 6) & 0x1F)
|
|
#define _SIZE ((op>>11) & 0x1F)
|
|
#define _IMM16 (signed short)(op & 0xFFFF)
|
|
#define _IMM26 (op & 0x03FFFFFF)
|
|
|
|
// All functions should have CONDITIONAL_DISABLE, so we can narrow things down to a file quickly.
|
|
// Currently known non working ones should have DISABLE.
|
|
|
|
// #define CONDITIONAL_DISABLE { Comp_Generic(op); return; }
|
|
#define CONDITIONAL_DISABLE ;
|
|
#define DISABLE { Comp_Generic(op); return; }
|
|
|
|
namespace MIPSComp
|
|
{
|
|
using namespace Arm64Gen;
|
|
using namespace Arm64JitConstants;
|
|
|
|
void Arm64Jit::Comp_ITypeMemLR(MIPSOpcode op, bool load) {
|
|
DISABLE;
|
|
}
|
|
|
|
void Arm64Jit::Comp_ITypeMem(MIPSOpcode op) {
|
|
DISABLE;
|
|
}
|
|
|
|
void Arm64Jit::Comp_Cache(MIPSOpcode op) {
|
|
DISABLE;
|
|
}
|
|
}
|