summaryrefslogtreecommitdiff
path: root/include/v810_ins.h
blob: 8f6087f282e44024896f3c6f0bdf6e2d02ef898c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Defenition file of Instruction handler routines for
//the V810 processor

#ifndef V810_INST_H_
#define V810_INST_H_

#include "vb_types.h"

#define sign_32(num) (((num) & 0x80000000) ? (INT64)((num)|0xFFFFFFFF00000000LL) : (num))
#define sign_26(num) (((num) & 0x02000000) ? (WORD)((num)|0xFC000000) : (num))
#define sign_16(num) (((num) & 0x8000) ? (WORD)((num)|0xFFFF0000) : (num))
#define sign_14(num) (((num) & 0x2000) ? (WORD)((num)|0xFFFFC000) : (num))
#define sign_12(num) (((num) & 0x0800) ? (WORD)((num)|0xFFFFF000) : (num))
#define sign_9(num) (((num) & 0x0100) ? (WORD)((num)|0xFFFFFE00) : (num))
#define sign_8(num) (((num) & 0x0080) ? (WORD)((num)|0xFFFFFF00) : (num))
#define sign_5(num) (((num) & 0x0010) ? (WORD)((num)|0xFFFFFFE0) : (num))


extern void ins_err   (int arg1, int arg2); //Special handler?

//Bitstring SubOpcodes
extern void ins_sch0bsu (int arg1, int arg2);
extern void ins_sch0bsd (int arg1, int arg2);
extern void ins_sch1bsu (int arg1, int arg2);
extern void ins_sch1bsd (int arg1, int arg2);
extern void ins_orbsu   (int arg1, int arg2);
extern void ins_andbsu  (int arg1, int arg2);
extern void ins_xorbsu  (int arg1, int arg2);
extern void ins_movbsu  (int arg1, int arg2);
extern void ins_ornbsu  (int arg1, int arg2);
extern void ins_andnbsu (int arg1, int arg2);
extern void ins_xornbsu (int arg1, int arg2);
extern void ins_notbsu  (int arg1, int arg2);

//FPU SubOpcodes
extern float ins_cmpf_s  (float reg1, float reg2);
extern float ins_cvt_ws  (int   reg1, float reg2);
extern int   ins_cvt_sw  (float reg1, int   reg2);
extern float ins_addf_s  (float reg1, float reg2);
extern float ins_subf_s  (float reg1, float reg2);
extern float ins_mulf_s  (float reg1, float reg2);
extern float ins_divf_s  (float reg1, float reg2);
extern int   ins_trnc_sw (float reg1, int   reg2);
extern void ins_xb      (int arg1, int arg2); //Undocumented opcode XB (non-FPU)
extern void ins_xh      (int arg1, int arg2); //Undocumented opcode XH (non-FPU)
extern void ins_rev     (int arg1, int arg2); //Undocumented opcode REV (non-FPU)
extern void ins_mpyhw   (int arg1, int arg2); //Undocumented opcode MPYHW (non-FPU)

#endif