151 lines
2.0 KiB
C
151 lines
2.0 KiB
C
![]() |
/*
|
||
|
* H_LoadStore.h
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
#pragma once
|
||
|
|
||
|
|
||
|
|
||
|
namespace ARM
|
||
|
{
|
||
|
|
||
|
/*
|
||
|
* Load Helpers
|
||
|
*/
|
||
|
|
||
|
EAPI LoadImmBase(eReg Rt, u32 Base, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rt, Base, CC);
|
||
|
|
||
|
#if defined(_DEVEL)
|
||
|
LDR(Rt,Rt,0, Offset, CC);
|
||
|
#else
|
||
|
LDR(Rt,Rt,0, CC);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
EAPI LoadImmBase(eReg Rt, eReg Rn, u32 Base, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rn, Base, CC);
|
||
|
|
||
|
#if defined(_DEVEL)
|
||
|
LDR(Rt,Rn,0, Offset, CC);
|
||
|
#else
|
||
|
LDR(Rt,Rn,0, CC);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
EAPI LoadImmBase16(eReg Rt, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rt, Base, CC);
|
||
|
LDRH(Rt,Rt,0, CC);
|
||
|
|
||
|
if(Extend)
|
||
|
SXTH(Rt,Rt);
|
||
|
}
|
||
|
|
||
|
EAPI LoadImmBase16(eReg Rt, eReg Rn, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rn, Base, CC);
|
||
|
LDRH(Rt,Rn,0, CC);
|
||
|
|
||
|
if(Extend)
|
||
|
SXTH(Rt,Rt);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Store Helpers
|
||
|
*/
|
||
|
|
||
|
// you pick regs, loads Base with reg addr, you supply data in Rt
|
||
|
EAPI StoreImmBase(eReg Rt, eReg Rn, u32 Base, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rn, Base, CC);
|
||
|
|
||
|
#if defined(_DEVEL)
|
||
|
STR(Rt,Rn,0, Offset, CC);
|
||
|
#else
|
||
|
STR(Rt,Rn,0, CC);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// you pick regs, loads Rt with const val, you supply base for Rn
|
||
|
EAPI StoreImmVal(eReg Rt, eReg Rn, u32 Val, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rt, Val, CC);
|
||
|
|
||
|
#if defined(_DEVEL)
|
||
|
STR(Rt,Rn,0, Offset, CC);
|
||
|
#else
|
||
|
STR(Rt,Rn,0, CC);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// you pick regs, loads Base with reg addr, loads Rt with const val
|
||
|
EAPI StoreImms(eReg Rt, eReg Rn, u32 Base, u32 Val, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rn, Base, CC);
|
||
|
MOV32(Rt, Val, CC);
|
||
|
|
||
|
#if defined(_DEVEL)
|
||
|
STR(Rt,Rn,0, Offset, CC);
|
||
|
#else
|
||
|
STR(Rt,Rn,0, CC);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#if defined(_DEVEL) && 0 // These require testing //
|
||
|
|
||
|
EAPI LoadImmBase8(eReg Rt, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rt, Base, CC);
|
||
|
LDRB(Rt,Rt,0, CC);
|
||
|
|
||
|
if(Extend)
|
||
|
SXTB(Rt,Rt);
|
||
|
}
|
||
|
|
||
|
EAPI LoadImmBase8(eReg Rt, eReg Rn, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||
|
{
|
||
|
MOV32(Rn, Base, CC);
|
||
|
LDRB(Rt,Rn,0, CC);
|
||
|
|
||
|
if(Extend)
|
||
|
SXTB(Rt,Rt);
|
||
|
}
|
||
|
|
||
|
#endif // defined(_DEVEL)
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|