summaryrefslogtreecommitdiff
path: root/includes/rts/Bytecodes.h
blob: 5e1fc287cb3f6d5a3c1ef1c4208585d63542e4ae (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* -----------------------------------------------------------------------------
 *
 * (c) The GHC Team, 1998-2009
 *
 * Bytecode definitions.
 *
 * ---------------------------------------------------------------------------*/

/* --------------------------------------------------------------------------
 * Instructions
 *
 * Notes:
 * o CASEFAIL is generated by the compiler whenever it tests an "irrefutable"
 *   pattern which fails.  If we don't see too many of these, we could
 *   optimise out the redundant test.
 * ------------------------------------------------------------------------*/

/* NOTE:

   THIS FILE IS INCLUDED IN HASKELL SOURCES (ghc/compiler/ghci/ByteCodeGen.lhs).
   DO NOT PUT C-SPECIFIC STUFF IN HERE!

   I hope that's clear :-)
*/

#define bci_STKCHECK  			1
#define bci_PUSH_L    			2
#define bci_PUSH_LL   			3
#define bci_PUSH_LLL  			4
#define bci_PUSH_G    			5
#define bci_PUSH_ALTS  			6
#define bci_PUSH_ALTS_P			7
#define bci_PUSH_ALTS_N			8 
#define bci_PUSH_ALTS_F			9 
#define bci_PUSH_ALTS_D			10
#define bci_PUSH_ALTS_L			11
#define bci_PUSH_ALTS_V			12
#define bci_PUSH_UBX  			13
#define bci_PUSH_APPLY_N		14
#define bci_PUSH_APPLY_F		15
#define bci_PUSH_APPLY_D		16
#define bci_PUSH_APPLY_L		17
#define bci_PUSH_APPLY_V		18
#define bci_PUSH_APPLY_P		19
#define bci_PUSH_APPLY_PP		20
#define bci_PUSH_APPLY_PPP		21
#define bci_PUSH_APPLY_PPPP		22
#define bci_PUSH_APPLY_PPPPP		23
#define bci_PUSH_APPLY_PPPPPP		24
/* #define bci_PUSH_APPLY_PPPPPPP		25 */
#define bci_SLIDE     			26
#define bci_ALLOC_AP   			27
#define bci_ALLOC_AP_NOUPD		28
#define bci_ALLOC_PAP  			29
#define bci_MKAP      			30
#define bci_MKPAP      			31
#define bci_UNPACK    			32
#define bci_PACK      			33
#define bci_TESTLT_I   			34
#define bci_TESTEQ_I  			35
#define bci_TESTLT_F  			36
#define bci_TESTEQ_F  			37
#define bci_TESTLT_D  			38
#define bci_TESTEQ_D  			39
#define bci_TESTLT_P  			40
#define bci_TESTEQ_P  			41
#define bci_CASEFAIL  			42
#define bci_JMP       			43
#define bci_CCALL     			44
#define bci_SWIZZLE   			45
#define bci_ENTER     			46
#define bci_RETURN    			47
#define bci_RETURN_P 			48
#define bci_RETURN_N 			49
#define bci_RETURN_F 			50
#define bci_RETURN_D 			51
#define bci_RETURN_L 			52
#define bci_RETURN_V 			53
#define bci_BRK_FUN			54
#define bci_TESTLT_W   			55
#define bci_TESTEQ_W  			56
/* If you need to go past 255 then you will run into the flags */

/* If you need to go below 0x0100 then you will run into the instructions */
#define bci_FLAG_LARGE_ARGS     0x8000

/* If a BCO definitely requires less than this many words of stack,
   don't include an explicit STKCHECK insn in it.  The interpreter
   will check for this many words of stack before running each BCO,
   rendering an explicit check unnecessary in the majority of
   cases. */
#define INTERP_STACK_CHECK_THRESH  50

/*-------------------------------------------------------------------------*/