00001
00002
00003 #ifndef CUEX_OPRDEFS_H
00004 #define CUEX_OPRDEFS_H
00005
00006 #include <cuex/ex.h>
00007
00008
00009
00010 CU_BEGIN_DECLARATIONS
00011
00012
00013
00014
00015 #define CUEX_OG_ALL_REL_MIN 0x0UL
00016 #define CUEX_OG_ALL_REL_MAXP 0x10000UL
00017 #define CUEX_OG_ALL_SHIFT 12
00018 #define CUEX_OG_ALL_ATTRS_SHIFT 12
00019 #define CUEX_OG_ALL_ATTRS_WIDTH 0
00020
00021 CU_SINLINE cu_bool_t cuex_og_all_contains(cuex_meta_t opr)
00022 { return cu_true; }
00023
00024 CU_SINLINE cuex_meta_t cuex_og_all_strip(cuex_meta_t opr)
00025 { return opr & 0xffffffffffffffffUL; }
00026
00027
00028
00029
00030
00031 #define CUEX_OG_REGULAR_REL_MIN 0x0UL
00032 #define CUEX_OG_REGULAR_REL_MAXP 0x4000UL
00033 #define CUEX_OG_REGULAR_SHIFT 12
00034 #define CUEX_OG_REGULAR_ATTRS_SHIFT 12
00035 #define CUEX_OG_REGULAR_ATTRS_WIDTH 0
00036
00037 CU_SINLINE cu_bool_t cuex_og_regular_contains(cuex_meta_t opr)
00038 { return opr < 0x4000000UL; }
00039
00040 CU_SINLINE cuex_meta_t cuex_og_regular_strip(cuex_meta_t opr)
00041 { return opr & 0xffffffffffffffffUL; }
00042
00043 #define CUEX_O0_NULL 0x1UL
00044 #define cuex_o0_null() cuex_opn(0x1UL)
00045 #define CUEX_O0_UNKNOWN 0x1001UL
00046 #define cuex_o0_unknown() cuex_opn(0x1001UL)
00047 #define CUEX_O1_IDENT 0x41UL
00048 #define cuex_o1_ident(e0) cuex_opn(0x41UL, e0)
00049 #define CUEX_O2_TUPLE 0x81UL
00050 #define cuex_o2_tuple(e0, e1) cuex_opn(0x81UL, e0, e1)
00051 #define CUEX_O2_MEET 0x1081UL
00052 #define cuex_o2_meet(e0, e1) cuex_opn(0x1081UL, e0, e1)
00053 #define CUEX_O2_JOIN 0x2081UL
00054 #define cuex_o2_join(e0, e1) cuex_opn(0x2081UL, e0, e1)
00055 #define CUEX_O2_GPROD 0x3081UL
00056 #define cuex_o2_gprod(e0, e1) cuex_opn(0x3081UL, e0, e1)
00057 #define CUEX_O2_GEXPT 0x4081UL
00058 #define cuex_o2_gexpt(e0, e1) cuex_opn(0x4081UL, e0, e1)
00059 #define CUEX_O2_FARROW 0x5081UL
00060 #define cuex_o2_farrow(e0, e1) cuex_opn(0x5081UL, e0, e1)
00061 #define CUEX_O2_FARROW_NATIVE 0x6081UL
00062 #define cuex_o2_farrow_native(e0, e1) cuex_opn(0x6081UL, e0, e1)
00063 #define CUEX_O1_PTR_TO 0x1041UL
00064 #define cuex_o1_ptr_to(e0) cuex_opn(0x1041UL, e0)
00065 #define CUEX_O2_PAIR 0x7081UL
00066 #define cuex_o2_pair(e0, e1) cuex_opn(0x7081UL, e0, e1)
00067 #define CUEX_O2_APPLY 0x8081UL
00068 #define cuex_o2_apply(e0, e1) cuex_opn(0x8081UL, e0, e1)
00069 #define CUEX_O3_IF 0xc1UL
00070 #define cuex_o3_if(e0, e1, e2) cuex_opn(0xc1UL, e0, e1, e2)
00071 #define CUEX_OR_TUPLE(r) (0x9001UL | (cuex_meta_t)(r) << 6)
00072 #define CUEX_O2_RBIND 0xa081UL
00073 #define cuex_o2_rbind(e0, e1) cuex_opn(0xa081UL, e0, e1)
00074 #define CUEX_O1_SINGLETON 0x2041UL
00075 #define cuex_o1_singleton(e0) cuex_opn(0x2041UL, e0)
00076 #define CUEX_O1_VTABLE_SLOTS 0x3041UL
00077 #define cuex_o1_vtable_slots(e0) cuex_opn(0x3041UL, e0)
00078
00079
00080
00081
00082 #define CUEX_OG_METAREGULAR_REL_MIN 0x3fe0UL
00083 #define CUEX_OG_METAREGULAR_REL_MAXP 0x4000UL
00084 #define CUEX_OG_METAREGULAR_SHIFT 12
00085 #define CUEX_OG_METAREGULAR_ATTRS_SHIFT 12
00086 #define CUEX_OG_METAREGULAR_ATTRS_WIDTH 0
00087
00088 CU_SINLINE cu_bool_t cuex_og_metaregular_contains(cuex_meta_t opr)
00089 { return 0x3fe0000UL <= opr && opr < 0x4000000UL; }
00090
00091 CU_SINLINE cuex_meta_t cuex_og_metaregular_strip(cuex_meta_t opr)
00092 { return opr & 0xffffffffffffffffUL; }
00093
00094 #define CUEX_O1_SUBST_BLOCK 0x3fe0041UL
00095 #define cuex_o1_subst_block(e0) cuex_opn(0x3fe0041UL, e0)
00096 #define CUEX_O2_INTERNAL0 0x3fe0081UL
00097 #define cuex_o2_internal0(e0, e1) cuex_opn(0x3fe0081UL, e0, e1)
00098 #define CUEX_O0_METANULL 0x3fe0001UL
00099 #define cuex_o0_metanull() cuex_opn(0x3fe0001UL)
00100 #define CUEX_O0_METAIDR0 0x3fe1001UL
00101 #define cuex_o0_metaidr0() cuex_opn(0x3fe1001UL)
00102 #define CUEX_O1_METAIDENT 0x3fe1041UL
00103 #define cuex_o1_metaident(e0) cuex_opn(0x3fe1041UL, e0)
00104 #define CUEX_O1_METATAG0 0x3fe2041UL
00105 #define cuex_o1_metatag0(e0) cuex_opn(0x3fe2041UL, e0)
00106 #define CUEX_O1_METATAG1 0x3fe3041UL
00107 #define cuex_o1_metatag1(e0) cuex_opn(0x3fe3041UL, e0)
00108 #define CUEX_O2_METAPAIR 0x3fe1081UL
00109 #define cuex_o2_metapair(e0, e1) cuex_opn(0x3fe1081UL, e0, e1)
00110 #define CUEX_O2_METAJOIN 0x3fe2081UL
00111 #define cuex_o2_metajoin(e0, e1) cuex_opn(0x3fe2081UL, e0, e1)
00112
00113
00114
00115
00116 #define CUEX_OG_SCOPING_REL_MIN 0x4200UL
00117 #define CUEX_OG_SCOPING_REL_MAXP 0x4210UL
00118 #define CUEX_OG_SCOPING_SHIFT 12
00119 #define CUEX_OG_SCOPING_ATTRS_SHIFT 12
00120 #define CUEX_OG_SCOPING_ATTRS_WIDTH 0
00121
00122 CU_SINLINE cu_bool_t cuex_og_scoping_contains(cuex_meta_t opr)
00123 { return 0x4200000UL <= opr && opr < 0x4210000UL; }
00124
00125 CU_SINLINE cuex_meta_t cuex_og_scoping_strip(cuex_meta_t opr)
00126 { return opr & 0xffffffffffffffffUL; }
00127
00128 #define CUEX_O2_LAMBDA 0x4200081UL
00129 #define cuex_o2_lambda(e0, e1) cuex_opn(0x4200081UL, e0, e1)
00130 #define CUEX_O3_LAMBDA_TA 0x42000c1UL
00131 #define cuex_o3_lambda_ta(e0, e1, e2) cuex_opn(0x42000c1UL, e0, e1, e2)
00132 #define CUEX_O2_FORALL 0x4201081UL
00133 #define cuex_o2_forall(e0, e1) cuex_opn(0x4201081UL, e0, e1)
00134 #define CUEX_O3_FORALL 0x42010c1UL
00135 #define cuex_o3_forall(e0, e1, e2) cuex_opn(0x42010c1UL, e0, e1, e2)
00136
00137
00138
00139
00140 #define CUEX_OG_TA_REL_MIN 0x4210UL
00141 #define CUEX_OG_TA_REL_MAXP 0x4220UL
00142 #define CUEX_OG_TA_SHIFT 12
00143 #define CUEX_OG_TA_ATTRS_SHIFT 12
00144 #define CUEX_OG_TA_ATTRS_WIDTH 0
00145
00146 CU_SINLINE cu_bool_t cuex_og_ta_contains(cuex_meta_t opr)
00147 { return 0x4210000UL <= opr && opr < 0x4220000UL; }
00148
00149 CU_SINLINE cuex_meta_t cuex_og_ta_strip(cuex_meta_t opr)
00150 { return opr & 0xffffffffffffffffUL; }
00151
00152 #define CUEX_O2_IDENT_TA 0x4210081UL
00153 #define cuex_o2_ident_ta(e0, e1) cuex_opn(0x4210081UL, e0, e1)
00154 #define CUEX_O3_LOAD_TA 0x42100c1UL
00155 #define cuex_o3_load_ta(e0, e1, e2) cuex_opn(0x42100c1UL, e0, e1, e2)
00156 #define CUEX_OR_CALL_TA(r) (0x4211001UL | (cuex_meta_t)(r) << 6)
00157
00158
00159
00160
00161 #define CUEXP_OG_LTREE_REL_MIN 0x6000UL
00162 #define CUEXP_OG_LTREE_REL_MAXP 0x6200UL
00163 #define CUEXP_OG_LTREE_SHIFT 17
00164 #define CUEXP_OG_LTREE_ATTRS_SHIFT 12
00165 #define CUEXP_OG_LTREE_ATTRS_WIDTH 5
00166
00167 CU_SINLINE cu_bool_t cuexP_og_ltree_contains(cuex_meta_t opr)
00168 { return 0x6000000UL <= opr && opr < 0x6200000UL; }
00169
00170 CU_SINLINE cuex_meta_t cuexP_og_ltree_strip(cuex_meta_t opr)
00171 { return opr & 0xfffffffffffe0fffUL; }
00172
00173 #define CUEXP_OA_LTREE_DEPTH(a) ((cuex_meta_t)(a) << 12)
00174 #define CUEXP_OA_LTREE_DEPTH_MASK 0x1f000UL
00175 #define CUEXP_OA_LTREE_DEPTH_WIDTH 5
00176
00177 CU_SINLINE cuex_meta_t cuexP_oa_ltree_depth_set(cuex_meta_t opr, unsigned int val)
00178 { return (opr & 0xfffffffffffe0fffUL) | ((cuex_meta_t)val << 12); }
00179
00180 CU_SINLINE unsigned int cuexP_oa_ltree_depth(cuex_meta_t opr)
00181 { return (unsigned int)((opr >> 12) & 0x1f); }
00182
00183 #define CUEXP_OR_LTREE(r) (0x6000001UL | (cuex_meta_t)(r) << 6)
00184
00185
00186
00187
00188 #define CUEX_OG_SEMILATTICE_REL_MIN 0x6800UL
00189 #define CUEX_OG_SEMILATTICE_REL_MAXP 0x7000UL
00190 #define CUEX_OG_SEMILATTICE_SHIFT 18
00191 #define CUEX_OG_SEMILATTICE_ATTRS_SHIFT 12
00192 #define CUEX_OG_SEMILATTICE_ATTRS_WIDTH 6
00193
00194 CU_SINLINE cu_bool_t cuex_og_semilattice_contains(cuex_meta_t opr)
00195 { return 0x6800000UL <= opr && opr < 0x7000000UL; }
00196
00197 CU_SINLINE cuex_meta_t cuex_og_semilattice_strip(cuex_meta_t opr)
00198 { return opr & 0xfffffffffffc0fffUL; }
00199
00200 #define CUEX_OA_SEMILATTICE_PREFIX(a) ((cuex_meta_t)(a) << 12)
00201 #define CUEX_OA_SEMILATTICE_PREFIX_MASK 0x3f000UL
00202 #define CUEX_OA_SEMILATTICE_PREFIX_WIDTH 6
00203
00204 CU_SINLINE cuex_meta_t cuex_oa_semilattice_prefix_set(cuex_meta_t opr, unsigned int val)
00205 { return (opr & 0xfffffffffffc0fffUL) | ((cuex_meta_t)val << 12); }
00206
00207 CU_SINLINE unsigned int cuex_oa_semilattice_prefix(cuex_meta_t opr)
00208 { return (unsigned int)((opr >> 12) & 0x3f); }
00209
00210
00211
00212
00213
00214 #define CUEX_OG_HOLE_REL_MIN 0x7000UL
00215 #define CUEX_OG_HOLE_REL_MAXP 0x7800UL
00216 #define CUEX_OG_HOLE_SHIFT 23
00217 #define CUEX_OG_HOLE_ATTRS_SHIFT 12
00218 #define CUEX_OG_HOLE_ATTRS_WIDTH 11
00219
00220 CU_SINLINE cu_bool_t cuex_og_hole_contains(cuex_meta_t opr)
00221 { return 0x7000000UL <= opr && opr < 0x7800000UL; }
00222
00223 CU_SINLINE cuex_meta_t cuex_og_hole_strip(cuex_meta_t opr)
00224 { return opr & 0xffffffffff800fffUL; }
00225
00226 #define CUEX_OA_HOLE_INDEX(a) ((cuex_meta_t)(a) << 12)
00227 #define CUEX_OA_HOLE_INDEX_MASK 0x7ff000UL
00228 #define CUEX_OA_HOLE_INDEX_WIDTH 11
00229
00230 CU_SINLINE cuex_meta_t cuex_oa_hole_index_set(cuex_meta_t opr, unsigned int val)
00231 { return (opr & 0xffffffffff800fffUL) | ((cuex_meta_t)val << 12); }
00232
00233 CU_SINLINE unsigned int cuex_oa_hole_index(cuex_meta_t opr)
00234 { return (unsigned int)((opr >> 12) & 0x7ff); }
00235
00236 #define CUEX_O0_HOLE 0x7000001UL
00237 #define cuex_o0_hole() cuex_opn(0x7000001UL)
00238 #define CUEX_O2_MUPATH 0x7000081UL
00239 #define cuex_o2_mupath(e0, e1) cuex_opn(0x7000081UL, e0, e1)
00240
00241
00242
00243
00244 #define CUEX_OG_BINDER_REL_MIN 0x7f00UL
00245 #define CUEX_OG_BINDER_REL_MAXP 0x8000UL
00246 #define CUEX_OG_BINDER_SHIFT 12
00247 #define CUEX_OG_BINDER_ATTRS_SHIFT 12
00248 #define CUEX_OG_BINDER_ATTRS_WIDTH 0
00249
00250 CU_SINLINE cu_bool_t cuex_og_binder_contains(cuex_meta_t opr)
00251 { return 0x7f00000UL <= opr && opr < 0x8000000UL; }
00252
00253 CU_SINLINE cuex_meta_t cuex_og_binder_strip(cuex_meta_t opr)
00254 { return opr & 0xffffffffffffffffUL; }
00255
00256 #define CUEX_O1_MU 0x7f00041UL
00257 #define cuex_o1_mu(e0) cuex_opn(0x7f00041UL, e0)
00258 #define CUEX_O1_LAMBDA 0x7f01041UL
00259 #define cuex_o1_lambda(e0) cuex_opn(0x7f01041UL, e0)
00260
00261
00262 #define CUEX_OPRDEFS_OA_COUNT_MAX 1
00263
00264
00265
00266
00267
00268 cuex_meta_t
00269 cuex_oprdefs_decode_opr(cuex_meta_t opr, int *oa_cnt, int *oa_arr);
00270
00271 extern void cuex_oprdefs_init(void);
00272
00273 CU_END_DECLARATIONS
00274
00275
00276 #endif