Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/attic/PsxHawk.Core/asm.h
2 views
1
#pragma once
2
3
#include "types.h"
4
5
//jtype
6
#define OPCODE_J 2
7
#define OPCODE_JAL 3
8
9
//rtype
10
#define FUNCTION_JR 8
11
#define FUNCTION_BREAK 13
12
13
//itype
14
#define OPCODE_ORI 13
15
#define OPCODE_LUI 15
16
17
inline u32 ASM_JTYPE(const u32 opcode, const u32 target)
18
{
19
assert((target&3)==0);
20
assert(opcode<64);
21
const u32 _target = target & ~0xF0000000;
22
return (opcode<<26)|(_target>>2);
23
}
24
inline u32 ASM_JAL(const u32 target) { return ASM_JTYPE(OPCODE_JAL,target); }
25
26
inline u32 ASM_RTYPE(const u32 function, const u32 rs, const u32 rt, const u32 rd, const u32 sa)
27
{
28
assert(function<64);
29
assert(rs<32);
30
assert(rt<32);
31
assert(rd<32);
32
assert(sa<32);
33
return (rs<<21)|(rt<<16)|(rd<<11)|(sa<<6)|function;
34
}
35
inline u32 ASM_JR(const u32 rs) { return ASM_RTYPE(FUNCTION_JR, rs, 0, 0, 0); }
36
inline u32 ASM_NOP() { return 0; }
37
inline u32 ASM_BREAK(const u32 code)
38
{
39
assert(code<(1<<20));
40
return (code<<6)|FUNCTION_BREAK;
41
}
42
43
inline u32 ASM_ITYPE(const u32 opcode, const u32 rs, const u32 rt, const u32 immediate)
44
{
45
assert(opcode<64);
46
assert(rs<32);
47
assert(rt<32);
48
assert(immediate<65536);
49
return (opcode<<26)|(rs<<21)|(rt<<16)|immediate;
50
}
51
52
inline u32 ASM_LUI(const u32 rt, const u32 immediate) { return ASM_ITYPE(OPCODE_LUI,0,rt,immediate); }
53
inline u32 ASM_ORI(const u32 rt, const u32 rs, const u32 immediate) { return ASM_ITYPE(OPCODE_ORI,rs,rt,immediate); }
54