1#ifndef OPCODES_H
2#define OPCODES_H
3
4/* (Along the lines of ../s390x/opcodes.h) Macro definitions to hand-assemble
5 * instructions known to cause problems with assemblers or across assembler
6 * versions.
7 *
8 * Notes:
9 *
10 * 0. Offsets used in encodings are in Valgrind (Right to Left) ordering.
11 * 1. Use register numbers, not register names in macro invocations.
12 * 2. Insert the definitions for a new instruction/instruction format in
13 *    the order of the appearance of its definition in the Power ISA.
14 */
15
16/* Instruction formats:
17 */
18
19/* Power ISA Version 2.07 (May 3, 2013). pp. 15: X-FORM */
20#define X20_ASM_DIRECTIVE ".long"
21#define X20_OPCODE_OFFSET "26"
22#define X20_TH_OFFSET     "21"
23#define X20_RA_OFFSET     "16"
24#define X20_RB_OFFSET     "11"
25#define X20_XO_OFFSET     "1"
26#define X20_RES_OFFSET    "0"
27
28#define X20_ASM(OPCODE, TH, RA, RB, XO, RES)       \
29        X20_ASM_DIRECTIVE                  " "     \
30        "(" #OPCODE "<<" X20_OPCODE_OFFSET ")" "+" \
31        "(" #TH     "<<" X20_TH_OFFSET     ")" "+" \
32        "(" #RA     "<<" X20_RA_OFFSET     ")" "+" \
33        "(" #RB     "<<" X20_RB_OFFSET     ")" "+" \
34        "(" #XO     "<<" X20_XO_OFFSET     ")" "+" \
35        "(" #RES    "<<" X20_RES_OFFSET    ")"
36
37#define X20(OPCODE, TH, RA, RB, XO, RES) X20_ASM(OPCODE, TH, RA, RB, XO, RES)
38
39/* Instruction specifics:
40 */
41
42/* Power ISA Version 2.07 (May 3, 2013). pp. 770: dcbt (Category: Server Syntax) */
43#define DCBT_OPCODE 31
44#define DCBT_XO     278
45#define DCBT_RES    0
46#define DCBT_S(RA, RB, TH) X20(DCBT_OPCODE, TH, RA, RB, DCBT_XO, DCBT_RES)
47#define ASM_DCBT(RA, RB, TH) __asm__ __volatile__ (DCBT_S(RA, RB, TH))
48
49/* Power ISA Version 2.07 (May 3, 2013). pp. 771: dcbtst (Category: Server Syntax) */
50#define DCBTST_OPCODE 31
51#define DCBTST_XO     246
52#define DCBTST_RES    0
53#define DCBTST_S(RA, RB, TH) X20(DCBTST_OPCODE, TH, RA, RB, DCBTST_XO, DCBTST_RES)
54#define ASM_DCBTST(RA, RB, TH) __asm__ __volatile__ (DCBTST_S(RA, RB, TH))
55
56#endif /* OPCODES_H */
57