1 /******************************** -*- C -*- **************************** 2 * 3 * Platform-independent layer support 4 * 5 ***********************************************************************/ 6 7 8 /*********************************************************************** 9 * 10 * Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 11 * Written by Paolo Bonzini. 12 * 13 * This file is part of GNU lightning. 14 * 15 * GNU lightning is free software; you can redistribute it and/or modify it 16 * under the terms of the GNU Lesser General Public License as published 17 * by the Free Software Foundation; either version 2.1, or (at your option) 18 * any later version. 19 * 20 * GNU lightning is distributed in the hope that it will be useful, but 21 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 22 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 23 * License for more details. 24 * 25 * You should have received a copy of the GNU Lesser General Public License 26 * along with GNU lightning; see the file COPYING.LESSER; if not, write to the 27 * Free Software Foundation, 59 Temple Place - Suite 330, Boston, 28 * MA 02111-1307, USA. 29 * 30 ***********************************************************************/ 31 32 33 #ifndef __lightning_core_common_h_ 34 #define __lightning_core_common_h_ 35 36 /* jit_code: union of many possible function pointer types. Returned 37 * by jit_get_ip(). 38 */ 39 typedef union jit_code { 40 char *ptr; 41 void (*vptr)(void); 42 char (*cptr)(void); 43 unsigned char (*ucptr)(void); 44 short (*sptr)(void); 45 unsigned short (*usptr)(void); 46 int (*iptr)(void); 47 unsigned int (*uiptr)(void); 48 long (*lptr)(void); 49 unsigned long (*ulptr)(void); 50 void * (*pptr)(void); 51 float (*fptr)(void); 52 double (*dptr)(void); 53 } jit_code; 54 55 typedef struct { 56 union { 57 jit_insn *pc; 58 _uc *uc_pc; 59 _us *us_pc; 60 _ui *ui_pc; 61 _ul *ul_pc; 62 jit_code code; 63 } x; 64 struct jit_fp *fp; 65 struct jit_local_state jitl; 66 } jit_state; 67 68 #if 0 69 # ifdef jit_init 70 static jit_state _jit = jit_init (); 71 # else 72 static jit_state _jit; 73 # endif 74 #endif 75 76 #define JIT_NOREG (-1) 77 #define JIT_R0 JIT_R(0) 78 #define JIT_R1 JIT_R(1) 79 #define JIT_R2 JIT_R(2) 80 #define JIT_V0 JIT_V(0) 81 #define JIT_V1 JIT_V(1) 82 #define JIT_V2 JIT_V(2) 83 84 #define _jitl _jit.jitl 85 86 #define jit_get_ip() (_jit.x.pc) 87 #define jit_get_raw_ip() jit_get_ip() 88 #define jit_set_ip(ptr) (_jit.x.pc = (ptr), jit_get_ip ()) 89 #define jit_get_label() (_jit.x.pc) 90 #define jit_forward() (_jit.x.pc) 91 92 #define jit_adjust_ip(x) x 93 #define jit_unadjust_ip(x) x 94 95 #define jit_field(struc, f) ( ((long) (&((struc *) 8)->f) ) - 8) 96 #define jit_ptr_field(struc_p, f) ( ((long) (&((struc_p) 8)->f) ) - 8) 97 98 /* realignment via N-byte no-ops */ 99 100 #ifndef jit_align 101 #define jit_align(n) 102 #endif 103 104 105 #ifndef jit_fill_delay_after 106 #define jit_fill_delay_after(branch) (branch) 107 #endif 108 109 #define jit_delay(insn, branch) ((insn), jit_fill_delay_after(branch)) 110 111 112 /* ALU synonyms */ 113 #define jit_addi_ui(d, rs, is) jit_addi_i((d), (rs), (is)) 114 #define jit_addr_ui(d, s1, s2) jit_addr_i((d), (s1), (s2)) 115 #define jit_addci_ui(d, rs, is) jit_addci_i((d), (rs), (is)) 116 #define jit_addcr_ui(d, s1, s2) jit_addcr_i((d), (s1), (s2)) 117 #define jit_addxi_ui(d, rs, is) jit_addxi_i((d), (rs), (is)) 118 #define jit_addxr_ui(d, s1, s2) jit_addxr_i((d), (s1), (s2)) 119 #define jit_andi_ui(d, rs, is) jit_andi_i((d), (rs), (is)) 120 #define jit_andr_ui(d, s1, s2) jit_andr_i((d), (s1), (s2)) 121 #define jit_lshi_ui(d, rs, is) jit_lshi_i((d), (rs), (is)) 122 #define jit_lshr_ui(d, s1, s2) jit_lshr_i((d), (s1), (s2)) 123 #define jit_movi_ui(d, rs) jit_movi_i((d), (rs)) 124 #define jit_movr_ui(d, rs) jit_movr_i((d), (rs)) 125 #define jit_ori_ui(d, rs, is) jit_ori_i((d), (rs), (is)) 126 #define jit_orr_ui(d, s1, s2) jit_orr_i((d), (s1), (s2)) 127 #define jit_rsbi_ui(d, rs, is) jit_rsbi_i((d), (rs), (is)) 128 #define jit_rsbr_ui(d, s1, s2) jit_rsbr_i((d), (s1), (s2)) 129 #define jit_subi_ui(d, rs, is) jit_subi_i((d), (rs), (is)) 130 #define jit_subr_ui(d, s1, s2) jit_subr_i((d), (s1), (s2)) 131 #define jit_subci_ui(d, rs, is) jit_subci_i((d), (rs), (is)) 132 #define jit_subcr_ui(d, s1, s2) jit_subcr_i((d), (s1), (s2)) 133 #define jit_subxi_ui(d, rs, is) jit_subxi_i((d), (rs), (is)) 134 #define jit_subxr_ui(d, s1, s2) jit_subxr_i((d), (s1), (s2)) 135 #define jit_xori_ui(d, rs, is) jit_xori_i((d), (rs), (is)) 136 #define jit_xorr_ui(d, s1, s2) jit_xorr_i((d), (s1), (s2)) 137 138 #define jit_addi_ul(d, rs, is) jit_addi_l((d), (rs), (is)) 139 #define jit_addr_ul(d, s1, s2) jit_addr_l((d), (s1), (s2)) 140 #define jit_addci_ul(d, rs, is) jit_addci_l((d), (rs), (is)) 141 #define jit_addcr_ul(d, s1, s2) jit_addcr_l((d), (s1), (s2)) 142 #define jit_addxi_ul(d, rs, is) jit_addxi_l((d), (rs), (is)) 143 #define jit_addxr_ul(d, s1, s2) jit_addxr_l((d), (s1), (s2)) 144 #define jit_andi_ul(d, rs, is) jit_andi_l((d), (rs), (is)) 145 #define jit_andr_ul(d, s1, s2) jit_andr_l((d), (s1), (s2)) 146 #define jit_lshi_ul(d, rs, is) jit_lshi_l((d), (rs), (is)) 147 #define jit_lshr_ul(d, s1, s2) jit_lshr_l((d), (s1), (s2)) 148 #define jit_movi_ul(d, rs) jit_movi_l((d), (rs)) 149 #define jit_movr_ul(d, rs) jit_movr_l((d), (rs)) 150 #define jit_ori_ul(d, rs, is) jit_ori_l((d), (rs), (is)) 151 #define jit_orr_ul(d, s1, s2) jit_orr_l((d), (s1), (s2)) 152 #define jit_rsbi_ul(d, rs, is) jit_rsbi_l((d), (rs), (is)) 153 #define jit_rsbr_ul(d, s1, s2) jit_rsbr_l((d), (s1), (s2)) 154 #define jit_subi_ul(d, rs, is) jit_subi_l((d), (rs), (is)) 155 #define jit_subr_ul(d, s1, s2) jit_subr_l((d), (s1), (s2)) 156 #define jit_subci_ul(d, rs, is) jit_subci_l((d), (rs), (is)) 157 #define jit_subcr_ul(d, s1, s2) jit_subcr_l((d), (s1), (s2)) 158 #define jit_subxi_ui(d, rs, is) jit_subxi_i((d), (rs), (is)) 159 #define jit_subxi_ul(d, rs, is) jit_subxi_l((d), (rs), (is)) 160 #define jit_subxr_ui(d, s1, s2) jit_subxr_i((d), (s1), (s2)) 161 #define jit_subxr_ul(d, s1, s2) jit_subxr_i((d), (s1), (s2)) 162 #define jit_xori_ul(d, rs, is) jit_xori_l((d), (rs), (is)) 163 #define jit_xorr_ul(d, s1, s2) jit_xorr_l((d), (s1), (s2)) 164 165 #define jit_addr_p(d, s1, s2) jit_addr_ul((d), (s1), (s2)) 166 #define jit_addi_p(d, rs, is) jit_addi_ul((d), (rs), (long) (is)) 167 #define jit_movr_p(d, rs) jit_movr_ul((d), (rs)) 168 #define jit_subr_p(d, s1, s2) jit_subr_ul((d), (s1), (s2)) 169 #define jit_subi_p(d, rs, is) jit_subi_ul((d), (rs), (long) (is)) 170 #define jit_rsbi_p(d, rs, is) jit_rsbi_ul((d), (rs), (long) (is)) 171 172 #ifndef jit_movi_p 173 #define jit_movi_p(d, is) (jit_movi_ul((d), (long) (is)), _jit.x.pc) 174 #endif 175 176 #define jit_patchable_movi_p(r, i) jit_movi_p(r, i) 177 #define jit_patch(pv) jit_patch_at ((pv), (_jit.x.pc)) 178 179 #ifndef jit_addci_i 180 #define jit_addci_i(d, rs, is) jit_addi_i((d), (rs), (is)) 181 #define jit_addcr_i(d, s1, s2) jit_addr_i((d), (s1), (s2)) 182 #define jit_addci_l(d, rs, is) jit_addi_l((d), (rs), (is)) 183 #define jit_addcr_l(d, s1, s2) jit_addr_l((d), (s1), (s2)) 184 #endif 185 186 #ifndef jit_subcr_i 187 #define jit_subcr_i(d, s1, s2) jit_subr_i((d), (s1), (s2)) 188 #endif 189 190 /* NEG is not mandatory -- pick an appropriate implementation */ 191 #ifndef jit_negr_i 192 # ifdef JIT_RZERO 193 # define jit_negr_i(d, rs) jit_subr_i((d), JIT_RZERO, (rs)) 194 # define jit_negr_l(d, rs) jit_subr_l((d), JIT_RZERO, (rs)) 195 # else /* !JIT_RZERO */ 196 # ifndef jit_rsbi_i 197 # define jit_negr_i(d, rs) (jit_xori_i((d), (rs), -1), jit_addi_l((d), (d), 1)) 198 # define jit_negr_l(d, rs) (jit_xori_l((d), (rs), -1), jit_addi_l((d), (d), 1)) 199 # else /* jit_rsbi_i */ 200 # define jit_negr_i(d, rs) jit_rsbi_i((d), (rs), 0) 201 # define jit_negr_l(d, rs) jit_rsbi_l((d), (rs), 0) 202 # endif /* jit_rsbi_i */ 203 # endif /* !JIT_RZERO */ 204 #endif /* !jit_negr_i */ 205 206 /* RSB is not mandatory */ 207 #ifndef jit_rsbi_i 208 # define jit_rsbi_i(d, rs, is) (jit_subi_i((d), (rs), (is)), jit_negr_i((d), (d))) 209 210 # ifndef jit_rsbi_l 211 # define jit_rsbi_l(d, rs, is) (jit_subi_l((d), (rs), (is)), jit_negr_l((d), (d))) 212 # endif 213 #endif 214 215 /* Common 'shortcut' implementations */ 216 #define jit_subi_i(d, rs, is) jit_addi_i((d), (rs), -(is)) 217 #define jit_subi_l(d, rs, is) jit_addi_l((d), (rs), -(is)) 218 #define jit_subci_i(d, rs, is) jit_addci_i((d), (rs), -(is)) 219 #define jit_subci_l(d, rs, is) jit_addci_l((d), (rs), -(is)) 220 #define jit_rsbr_f(d, s1, s2) jit_subr_f((d), (s2), (s1)) 221 #define jit_rsbr_d(d, s1, s2) jit_subr_d((d), (s2), (s1)) 222 #define jit_rsbr_i(d, s1, s2) jit_subr_i((d), (s2), (s1)) 223 #define jit_rsbr_l(d, s1, s2) jit_subr_l((d), (s2), (s1)) 224 #define jit_rsbr_p(d, s1, s2) jit_subr_p((d), (s2), (s1)) 225 226 /* Unary */ 227 #define jit_notr_c(d, rs) jit_xori_c((d), (rs), 255) 228 #define jit_notr_uc(d, rs) jit_xori_c((d), (rs), 255) 229 #define jit_notr_s(d, rs) jit_xori_s((d), (rs), 65535) 230 #define jit_notr_us(d, rs) jit_xori_s((d), (rs), 65535) 231 #define jit_notr_i(d, rs) jit_xori_i((d), (rs), ~0) 232 #define jit_notr_ui(d, rs) jit_xori_i((d), (rs), ~0) 233 #define jit_notr_l(d, rs) jit_xori_l((d), (rs), ~0L) 234 #define jit_notr_ul(d, rs) jit_xori_l((d), (rs), ~0L) 235 236 #ifndef jit_extr_c_ui 237 #define jit_extr_c_ui(d, rs) jit_andi_ui((d), (rs), 0xFF) 238 #endif 239 #ifndef jit_extr_s_ui 240 #define jit_extr_s_ui(d, rs) jit_andi_ui((d), (rs), 0xFFFF) 241 #endif 242 #ifndef jit_extr_c_i 243 #define jit_extr_c_i(d, rs) (jit_lshi_i((d), (rs), 24), jit_rshi_i((d), (d), 24)) 244 #endif 245 #ifndef jit_extr_s_i 246 #define jit_extr_s_i(d, rs) (jit_lshi_i((d), (rs), 16), jit_rshi_i((d), (d), 16)) 247 #endif 248 249 #ifdef jit_addi_l /* sizeof(long) != sizeof(int) */ 250 #ifndef jit_extr_c_l 251 #define jit_extr_c_l(d, rs) (jit_lshi_l((d), (rs), 56), jit_rshi_l((d), (d), 56)) 252 #endif 253 #ifndef jit_extr_s_l 254 #define jit_extr_s_l(d, rs) (jit_lshi_l((d), (rs), 48), jit_rshi_l((d), (d), 48)) 255 #endif 256 #ifndef jit_extr_i_l 257 #define jit_extr_i_l(d, rs) (jit_lshi_l((d), (rs), 32), jit_rshi_l((d), (d), 32)) 258 #endif 259 #ifndef jit_extr_c_ul 260 #define jit_extr_c_ul(d, rs) jit_andi_l((d), (rs), 0xFF) 261 #endif 262 #ifndef jit_extr_s_ul 263 #define jit_extr_s_ul(d, rs) jit_andi_l((d), (rs), 0xFFFF) 264 #endif 265 #ifndef jit_extr_i_ul 266 #define jit_extr_i_ul(d, rs) jit_andi_l((d), (rs), 0xFFFFFFFFUL) 267 #endif 268 #endif 269 270 #define jit_extr_c_s(d, rs) jit_extr_c_i((d), (rs)) 271 #define jit_extr_c_us(d, rs) jit_extr_c_ui((d), (rs)) 272 #define jit_extr_uc_s(d, rs) jit_extr_uc_i((d), (rs)) 273 #define jit_extr_uc_us(d, rs) jit_extr_uc_ui((d), (rs)) 274 #define jit_extr_uc_i(d, rs) jit_extr_c_ui((d), (rs)) 275 #define jit_extr_uc_ui(d, rs) jit_extr_c_ui((d), (rs)) 276 #define jit_extr_us_i(d, rs) jit_extr_s_ui((d), (rs)) 277 #define jit_extr_us_ui(d, rs) jit_extr_s_ui((d), (rs)) 278 #define jit_extr_uc_l(d, rs) jit_extr_c_ul((d), (rs)) 279 #define jit_extr_uc_ul(d, rs) jit_extr_c_ul((d), (rs)) 280 #define jit_extr_us_l(d, rs) jit_extr_s_ul((d), (rs)) 281 #define jit_extr_us_ul(d, rs) jit_extr_s_ul((d), (rs)) 282 #define jit_extr_ui_l(d, rs) jit_extr_i_ul((d), (rs)) 283 #define jit_extr_ui_ul(d, rs) jit_extr_i_ul((d), (rs)) 284 285 286 /* NTOH/HTON is not mandatory for big endian architectures */ 287 #ifndef jit_ntoh_ui /* big endian */ 288 #define jit_ntoh_ui(d, rs) ((d) == (rs) ? (void)0 : jit_movr_i((d), (rs))) 289 #define jit_ntoh_us(d, rs) ((d) == (rs) ? (void)0 : jit_movr_i((d), (rs))) 290 #endif /* big endian */ 291 292 /* hton is a synonym for ntoh */ 293 #define jit_hton_ui(d, rs) jit_ntoh_ui((d), (rs)) 294 #define jit_hton_us(d, rs) jit_ntoh_us((d), (rs)) 295 296 /* Stack synonyms */ 297 #define jit_pushr_ui(rs) jit_pushr_i(rs) 298 #define jit_popr_ui(rs) jit_popr_i(rs) 299 #define jit_pushr_ul(rs) jit_pushr_l(rs) 300 #define jit_popr_ul(rs) jit_popr_l(rs) 301 #define jit_pushr_p(rs) jit_pushr_ul(rs) 302 #define jit_popr_p(rs) jit_popr_ul(rs) 303 304 #define jit_prepare(nint) jit_prepare_i((nint)) 305 #define jit_pusharg_c(rs) jit_pusharg_i(rs) 306 #define jit_pusharg_s(rs) jit_pusharg_i(rs) 307 #define jit_pusharg_uc(rs) jit_pusharg_i(rs) 308 #define jit_pusharg_us(rs) jit_pusharg_i(rs) 309 #define jit_pusharg_ui(rs) jit_pusharg_i(rs) 310 #define jit_pusharg_ul(rs) jit_pusharg_l(rs) 311 #define jit_pusharg_p(rs) jit_pusharg_ul(rs) 312 #define jit_normal_pushonlyarg_p(rs) jit_pusharg_ul(rs) 313 314 /* Memory synonyms */ 315 316 #ifdef JIT_RZERO 317 #ifndef jit_ldi_c 318 #define jit_ldi_c(rd, is) jit_ldxi_c((rd), JIT_RZERO, (is)) 319 #define jit_sti_c(id, rs) jit_stxi_c((id), JIT_RZERO, (rs)) 320 #define jit_ldi_s(rd, is) jit_ldxi_s((rd), JIT_RZERO, (is)) 321 #define jit_sti_s(id, rs) jit_stxi_s((id), JIT_RZERO, (rs)) 322 #define jit_ldi_i(rd, is) jit_ldxi_i((rd), JIT_RZERO, (is)) 323 #define jit_sti_i(id, rs) jit_stxi_i((id), JIT_RZERO, (rs)) 324 #define jit_ldi_l(rd, is) jit_ldxi_l((rd), JIT_RZERO, (is)) 325 #define jit_sti_l(id, rs) jit_stxi_l((id), JIT_RZERO, (rs)) 326 #define jit_ldi_uc(rd, is) jit_ldxi_uc((rd), JIT_RZERO, (is)) 327 #define jit_ldi_us(rd, is) jit_ldxi_us((rd), JIT_RZERO, (is)) 328 #define jit_ldi_ui(rd, is) jit_ldxi_ui((rd), JIT_RZERO, (is)) 329 #define jit_ldi_ul(rd, is) jit_ldxi_ul((rd), JIT_RZERO, (is)) 330 #endif 331 332 #ifndef jit_ldr_c 333 #define jit_ldr_c(rd, rs) jit_ldxr_c((rd), JIT_RZERO, (rs)) 334 #define jit_str_c(rd, rs) jit_stxr_c(JIT_RZERO, (rd), (rs)) 335 #define jit_ldr_s(rd, rs) jit_ldxr_s((rd), JIT_RZERO, (rs)) 336 #define jit_str_s(rd, rs) jit_stxr_s(JIT_RZERO, (rd), (rs)) 337 #define jit_ldr_i(rd, rs) jit_ldxr_i((rd), JIT_RZERO, (rs)) 338 #define jit_str_i(rd, rs) jit_stxr_i(JIT_RZERO, (rd), (rs)) 339 #define jit_ldr_l(rd, rs) jit_ldxr_l((rd), JIT_RZERO, (rs)) 340 #define jit_str_l(rd, rs) jit_stxr_l(JIT_RZERO, (rd), (rs)) 341 #define jit_ldr_uc(rd, rs) jit_ldxr_uc((rd), JIT_RZERO, (rs)) 342 #define jit_ldr_us(rd, rs) jit_ldxr_us((rd), JIT_RZERO, (rs)) 343 #define jit_ldr_ui(rd, rs) jit_ldxr_ui((rd), JIT_RZERO, (rs)) 344 #define jit_ldr_ul(rd, rs) jit_ldxr_ul((rd), JIT_RZERO, (rs)) 345 #endif 346 #endif 347 348 #define jit_str_uc(rd, rs) jit_str_c((rd), (rs)) 349 #define jit_sti_uc(id, rs) jit_sti_c((id), (rs)) 350 #define jit_stxr_uc(d1, d2, rs) jit_stxr_c((d1), (d2), (rs)) 351 #define jit_stxi_uc(id, rd, is) jit_stxi_c((id), (rd), (is)) 352 353 #define jit_str_us(rd, rs) jit_str_s((rd), (rs)) 354 #define jit_sti_us(id, rs) jit_sti_s((id), (rs)) 355 #define jit_stxr_us(d1, d2, rs) jit_stxr_s((d1), (d2), (rs)) 356 #define jit_stxi_us(id, rd, is) jit_stxi_s((id), (rd), (is)) 357 358 #define jit_str_ui(rd, rs) jit_str_i((rd), (rs)) 359 #define jit_sti_ui(id, rs) jit_sti_i((id), (rs)) 360 #define jit_stxr_ui(d1, d2, rs) jit_stxr_i((d1), (d2), (rs)) 361 #define jit_stxi_ui(id, rd, is) jit_stxi_i((id), (rd), (is)) 362 363 #define jit_str_ul(rd, rs) jit_str_l((rd), (rs)) 364 #define jit_sti_ul(id, rs) jit_sti_l((id), (rs)) 365 #define jit_stxr_ul(d1, d2, rs) jit_stxr_l((d1), (d2), (rs)) 366 #define jit_stxi_ul(id, rd, is) jit_stxi_l((id), (rd), (is)) 367 368 #define jit_str_p(rd, rs) jit_str_l((rd), (rs)) 369 #define jit_sti_p(id, rs) jit_sti_l((id), (rs)) 370 #define jit_stxr_p(d1, d2, rs) jit_stxr_l((d1), (d2), (rs)) 371 #define jit_stxi_p(id, rd, is) jit_stxi_l((id), (rd), (is)) 372 373 #define jit_ldr_p(rd, rs) jit_ldr_l((rd), (rs)) 374 #define jit_ldi_p(rd, is) jit_ldi_l((rd), (is)) 375 #define jit_ldxr_p(rd, s1, s2) jit_ldxr_l((rd), (s1), (s2)) 376 #define jit_ldxi_p(rd, rs, is) jit_ldxi_l((rd), (rs), (is)) 377 378 379 /* Boolean & branch synonyms */ 380 #define jit_eqr_ui(d, s1, s2) jit_eqr_i((d), (s1), (s2)) 381 #define jit_eqi_ui(d, rs, is) jit_eqi_i((d), (rs), (is)) 382 #define jit_ner_ui(d, s1, s2) jit_ner_i((d), (s1), (s2)) 383 #define jit_nei_ui(d, rs, is) jit_nei_i((d), (rs), (is)) 384 385 #define jit_eqr_ul(d, s1, s2) jit_eqr_l((d), (s1), (s2)) 386 #define jit_eqi_ul(d, rs, is) jit_eqi_l((d), (rs), (is)) 387 #define jit_ner_ul(d, s1, s2) jit_ner_l((d), (s1), (s2)) 388 #define jit_nei_ul(d, rs, is) jit_nei_l((d), (rs), (is)) 389 390 #define jit_beqr_ui(label, s1, s2) jit_beqr_i((label), (s1), (s2)) 391 #define jit_beqi_ui(label, rs, is) jit_beqi_i((label), (rs), (is)) 392 #define jit_bner_ui(label, s1, s2) jit_bner_i((label), (s1), (s2)) 393 #define jit_bnei_ui(label, rs, is) jit_bnei_i((label), (rs), (is)) 394 #define jit_bmcr_ui(label, s1, s2) jit_bmcr_i((label), (s1), (s2)) 395 #define jit_bmci_ui(label, rs, is) jit_bmci_i((label), (rs), (is)) 396 #define jit_bmsr_ui(label, s1, s2) jit_bmsr_i((label), (s1), (s2)) 397 #define jit_bmsi_ui(label, rs, is) jit_bmsi_i((label), (rs), (is)) 398 399 #define jit_beqr_ul(label, s1, s2) jit_beqr_l((label), (s1), (s2)) 400 #define jit_beqi_ul(label, rs, is) jit_beqi_l((label), (rs), (is)) 401 #define jit_bner_ul(label, s1, s2) jit_bner_l((label), (s1), (s2)) 402 #define jit_bnei_ul(label, rs, is) jit_bnei_l((label), (rs), (is)) 403 #define jit_bmcr_ul(label, s1, s2) jit_bmcr_l((label), (s1), (s2)) 404 #define jit_bmci_ul(label, rs, is) jit_bmci_l((label), (rs), (is)) 405 #define jit_bmsr_ul(label, s1, s2) jit_bmsr_l((label), (s1), (s2)) 406 #define jit_bmsi_ul(label, rs, is) jit_bmsi_l((label), (rs), (is)) 407 408 #define jit_ltr_p(d, s1, s2) jit_ltr_ul((d), (s1), (s2)) 409 #define jit_lti_p(d, rs, is) jit_lti_ul((d), (rs), (is)) 410 #define jit_ler_p(d, s1, s2) jit_ler_ul((d), (s1), (s2)) 411 #define jit_lei_p(d, rs, is) jit_lei_ul((d), (rs), (is)) 412 #define jit_gtr_p(d, s1, s2) jit_gtr_ul((d), (s1), (s2)) 413 #define jit_gti_p(d, rs, is) jit_gti_ul((d), (rs), (is)) 414 #define jit_ger_p(d, s1, s2) jit_ger_ul((d), (s1), (s2)) 415 #define jit_gei_p(d, rs, is) jit_gei_ul((d), (rs), (is)) 416 #define jit_eqr_p(d, s1, s2) jit_eqr_ul((d), (s1), (s2)) 417 #define jit_eqi_p(d, rs, is) jit_eqi_ul((d), (rs), (is)) 418 #define jit_ner_p(d, s1, s2) jit_ner_ul((d), (s1), (s2)) 419 #define jit_nei_p(d, rs, is) jit_nei_ul((d), (rs), (is)) 420 421 #define jit_bltr_p(label, s1, s2) jit_bltr_ul((label), (s1), (s2)) 422 #define jit_blti_p(label, rs, is) jit_blti_ul((label), (rs), (is)) 423 #define jit_bler_p(label, s1, s2) jit_bler_ul((label), (s1), (s2)) 424 #define jit_blei_p(label, rs, is) jit_blei_ul((label), (rs), (is)) 425 #define jit_bgtr_p(label, s1, s2) jit_bgtr_ul((label), (s1), (s2)) 426 #define jit_bgti_p(label, rs, is) jit_bgti_ul((label), (rs), (is)) 427 #define jit_bger_p(label, s1, s2) jit_bger_ul((label), (s1), (s2)) 428 #define jit_bgei_p(label, rs, is) jit_bgei_ul((label), (rs), (is)) 429 #define jit_beqr_p(label, s1, s2) jit_beqr_ul((label), (s1), (s2)) 430 #define jit_beqi_p(label, rs, is) jit_beqi_ul((label), (rs), (is)) 431 #define jit_bner_p(label, s1, s2) jit_bner_ul((label), (s1), (s2)) 432 #define jit_bnei_p(label, rs, is) jit_bnei_ul((label), (rs), (is)) 433 434 #define jit_retval_ui(rd) jit_retval_i((rd)) 435 #define jit_retval_uc(rd) jit_retval_i((rd)) 436 #define jit_retval_us(rd) jit_retval_i((rd)) 437 #define jit_retval_ul(rd) jit_retval_l((rd)) 438 #define jit_retval_p(rd) jit_retval_ul((rd)) 439 #define jit_retval_c(rd) jit_retval_i((rd)) 440 #define jit_retval_s(rd) jit_retval_i((rd)) 441 442 /* This was a bug, but we keep it. */ 443 #define jit_retval(rd) jit_retval_i ((rd)) 444 445 #ifndef jit_finish 446 #define jit_finish(sub) jit_calli(sub) 447 #endif 448 449 #define jit_normal_finish(sub) jit_finish(sub) 450 451 #ifndef jit_finishr 452 #define jit_finishr(reg) jit_callr(reg) 453 #endif 454 455 #ifndef jit_prolog 456 #define jit_prolog(numargs) 457 #endif 458 459 #ifndef jit_leaf 460 #define jit_leaf(numargs) jit_prolog(numargs) 461 #endif 462 463 #ifndef jit_getarg_c 464 #define jit_getarg_c(reg, ofs) jit_extr_c_i ((reg), (ofs)) 465 #define jit_getarg_i(reg, ofs) jit_movr_i ((reg), (ofs)) 466 #define jit_getarg_l(reg, ofs) jit_movr_l ((reg), (ofs)) 467 #define jit_getarg_p(reg, ofs) jit_movr_p ((reg), (ofs)) 468 #define jit_getarg_s(reg, ofs) jit_extr_s_i ((reg), (ofs)) 469 #define jit_getarg_uc(reg, ofs) jit_extr_uc_ui((reg), (ofs)) 470 #define jit_getarg_ui(reg, ofs) jit_movr_ui ((reg), (ofs)) 471 #define jit_getarg_ul(reg, ofs) jit_extr_uc_ul((reg), (ofs)) 472 #define jit_getarg_us(reg, ofs) jit_extr_us_ul((reg), (ofs)) 473 #endif 474 475 476 /* Common definitions when sizeof(long) = sizeof(int) */ 477 #ifndef jit_addi_l 478 #define JIT_LONG_IS_INT 479 480 /* ALU */ 481 #define jit_addi_l(d, rs, is) jit_addi_i((d), (rs), (is)) 482 #define jit_addr_l(d, s1, s2) jit_addr_i((d), (s1), (s2)) 483 #define jit_addci_l(d, rs, is) jit_addci_i((d), (rs), (is)) 484 #define jit_addcr_l(d, s1, s2) jit_addcr_i((d), (s1), (s2)) 485 #define jit_addxi_l(d, rs, is) jit_addxi_i((d), (rs), (is)) 486 #define jit_addxr_l(d, s1, s2) jit_addxr_i((d), (s1), (s2)) 487 #define jit_andi_l(d, rs, is) jit_andi_i((d), (rs), (is)) 488 #define jit_andr_l(d, s1, s2) jit_andr_i((d), (s1), (s2)) 489 #define jit_divi_l(d, rs, is) jit_divi_i((d), (rs), (is)) 490 #define jit_divr_l(d, s1, s2) jit_divr_i((d), (s1), (s2)) 491 #define jit_hmuli_l(d, rs, is) jit_hmuli_i((d), (rs), (is)) 492 #define jit_hmulr_l(d, s1, s2) jit_hmulr_i((d), (s1), (s2)) 493 #define jit_lshi_l(d, rs, is) jit_lshi_i((d), (rs), (is)) 494 #define jit_lshr_l(d, s1, s2) jit_lshr_i((d), (s1), (s2)) 495 #define jit_modi_l(d, rs, is) jit_modi_i((d), (rs), (is)) 496 #define jit_modr_l(d, s1, s2) jit_modr_i((d), (s1), (s2)) 497 #define jit_muli_l(d, rs, is) jit_muli_i((d), (rs), (is)) 498 #define jit_mulr_l(d, s1, s2) jit_mulr_i((d), (s1), (s2)) 499 #define jit_ori_l(d, rs, is) jit_ori_i((d), (rs), (is)) 500 #define jit_orr_l(d, s1, s2) jit_orr_i((d), (s1), (s2)) 501 #define jit_rshi_l(d, rs, is) jit_rshi_i((d), (rs), (is)) 502 #define jit_rshr_l(d, s1, s2) jit_rshr_i((d), (s1), (s2)) 503 #define jit_subr_l(d, s1, s2) jit_subr_i((d), (s1), (s2)) 504 #define jit_subcr_l(d, s1, s2) jit_subcr_i((d), (s1), (s2)) 505 #define jit_subxi_l(d, rs, is) jit_subxi_i((d), (rs), (is)) 506 #define jit_subxr_l(d, s1, s2) jit_subxr_i((d), (s1), (s2)) 507 #define jit_xori_l(d, rs, is) jit_xori_i((d), (rs), (is)) 508 #define jit_xorr_l(d, s1, s2) jit_xorr_i((d), (s1), (s2)) 509 510 #ifndef jit_rsbi_l 511 #define jit_rsbi_l(d, rs, is) jit_rsbi_i((d), (rs), (is)) 512 #endif 513 514 #define jit_divi_ul(d, rs, is) jit_divi_ui((d), (rs), (is)) 515 #define jit_divr_ul(d, s1, s2) jit_divr_ui((d), (s1), (s2)) 516 #define jit_hmuli_ul(d, rs, is) jit_hmuli_ui((d), (rs), (is)) 517 #define jit_hmulr_ul(d, s1, s2) jit_hmulr_ui((d), (s1), (s2)) 518 #define jit_modi_ul(d, rs, is) jit_modi_ui((d), (rs), (is)) 519 #define jit_modr_ul(d, s1, s2) jit_modr_ui((d), (s1), (s2)) 520 #define jit_muli_ul(d, rs, is) jit_muli_ui((d), (rs), (is)) 521 #define jit_mulr_ul(d, s1, s2) jit_mulr_ui((d), (s1), (s2)) 522 #define jit_rshi_ul(d, rs, is) jit_rshi_ui((d), (rs), (is)) 523 #define jit_rshr_ul(d, s1, s2) jit_rshr_ui((d), (s1), (s2)) 524 525 /* Sign/Zero extension */ 526 #define jit_extr_c_l(d, rs) jit_extr_c_i(d, rs) 527 #define jit_extr_c_ul(d, rs) jit_extr_c_ui(d, rs) 528 #define jit_extr_s_l(d, rs) jit_extr_s_i(d, rs) 529 #define jit_extr_s_ul(d, rs) jit_extr_s_ui(d, rs) 530 #define jit_extr_i_l(d, rs) jit_movr_i(d, rs) 531 #define jit_extr_i_ul(d, rs) jit_movr_i(d, rs) 532 533 /* Unary */ 534 #define jit_movi_l(d, rs) jit_movi_i((d), (rs)) 535 #define jit_movr_l(d, rs) jit_movr_i((d), (rs)) 536 537 /* Stack */ 538 #define jit_pushr_l(rs) jit_pushr_i(rs) 539 #define jit_popr_l(rs) jit_popr_i(rs) 540 #define jit_pusharg_l(rs) jit_pusharg_i(rs) 541 542 /* Memory */ 543 #ifndef JIT_RZERO 544 #define jit_ldr_l(d, rs) jit_ldr_i((d), (rs)) 545 #define jit_ldi_l(d, is) jit_ldi_i((d), (is)) 546 #define jit_str_l(d, rs) jit_str_i((d), (rs)) 547 #define jit_sti_l(d, is) jit_sti_i((d), (is)) 548 #define jit_ldr_ui(d, rs) jit_ldr_i((d), (rs)) 549 #define jit_ldi_ui(d, is) jit_ldi_i((d), (is)) 550 #define jit_ldr_ul(d, rs) jit_ldr_ui((d), (rs)) 551 #define jit_ldi_ul(d, is) jit_ldi_ui((d), (is)) 552 #endif 553 554 #define jit_ldxr_l(d, s1, s2) jit_ldxr_i((d), (s1), (s2)) 555 #define jit_ldxi_l(d, rs, is) jit_ldxi_i((d), (rs), (is)) 556 #define jit_stxr_l(d, s1, s2) jit_stxr_i((d), (s1), (s2)) 557 #define jit_stxi_l(d, rs, is) jit_stxi_i((d), (rs), (is)) 558 #define jit_ldxr_ui(d, s1, s2) jit_ldxr_i((d), (s1), (s2)) 559 #define jit_ldxi_ui(d, rs, is) jit_ldxi_i((d), (rs), (is)) 560 #define jit_ldxr_ul(d, s1, s2) jit_ldxr_ui((d), (s1), (s2)) 561 #define jit_ldxi_ul(d, rs, is) jit_ldxi_ui((d), (rs), (is)) 562 563 564 /* Boolean */ 565 #define jit_ltr_l(d, s1, s2) jit_ltr_i((d), (s1), (s2)) 566 #define jit_lti_l(d, rs, is) jit_lti_i((d), (rs), (is)) 567 #define jit_ler_l(d, s1, s2) jit_ler_i((d), (s1), (s2)) 568 #define jit_lei_l(d, rs, is) jit_lei_i((d), (rs), (is)) 569 #define jit_gtr_l(d, s1, s2) jit_gtr_i((d), (s1), (s2)) 570 #define jit_gti_l(d, rs, is) jit_gti_i((d), (rs), (is)) 571 #define jit_ger_l(d, s1, s2) jit_ger_i((d), (s1), (s2)) 572 #define jit_gei_l(d, rs, is) jit_gei_i((d), (rs), (is)) 573 #define jit_eqr_l(d, s1, s2) jit_eqr_i((d), (s1), (s2)) 574 #define jit_eqi_l(d, rs, is) jit_eqi_i((d), (rs), (is)) 575 #define jit_ner_l(d, s1, s2) jit_ner_i((d), (s1), (s2)) 576 #define jit_nei_l(d, rs, is) jit_nei_i((d), (rs), (is)) 577 #define jit_ltr_ul(d, s1, s2) jit_ltr_ui((d), (s1), (s2)) 578 #define jit_lti_ul(d, rs, is) jit_lti_ui((d), (rs), (is)) 579 #define jit_ler_ul(d, s1, s2) jit_ler_ui((d), (s1), (s2)) 580 #define jit_lei_ul(d, rs, is) jit_lei_ui((d), (rs), (is)) 581 #define jit_gtr_ul(d, s1, s2) jit_gtr_ui((d), (s1), (s2)) 582 #define jit_gti_ul(d, rs, is) jit_gti_ui((d), (rs), (is)) 583 #define jit_ger_ul(d, s1, s2) jit_ger_ui((d), (s1), (s2)) 584 #define jit_gei_ul(d, rs, is) jit_gei_ui((d), (rs), (is)) 585 586 /* Branches */ 587 #define jit_bltr_l(label, s1, s2) jit_bltr_i((label), (s1), (s2)) 588 #define jit_blti_l(label, rs, is) jit_blti_i((label), (rs), (is)) 589 #define jit_bler_l(label, s1, s2) jit_bler_i((label), (s1), (s2)) 590 #define jit_blei_l(label, rs, is) jit_blei_i((label), (rs), (is)) 591 #define jit_bgtr_l(label, s1, s2) jit_bgtr_i((label), (s1), (s2)) 592 #define jit_bgti_l(label, rs, is) jit_bgti_i((label), (rs), (is)) 593 #define jit_bger_l(label, s1, s2) jit_bger_i((label), (s1), (s2)) 594 #define jit_bgei_l(label, rs, is) jit_bgei_i((label), (rs), (is)) 595 #define jit_beqr_l(label, s1, s2) jit_beqr_i((label), (s1), (s2)) 596 #define jit_beqi_l(label, rs, is) jit_beqi_i((label), (rs), (is)) 597 #define jit_bner_l(label, s1, s2) jit_bner_i((label), (s1), (s2)) 598 #define jit_bnei_l(label, rs, is) jit_bnei_i((label), (rs), (is)) 599 #define jit_bmcr_l(label, s1, s2) jit_bmcr_i((label), (s1), (s2)) 600 #define jit_bmci_l(label, rs, is) jit_bmci_i((label), (rs), (is)) 601 #define jit_bmsr_l(label, s1, s2) jit_bmsr_i((label), (s1), (s2)) 602 #define jit_bmsi_l(label, rs, is) jit_bmsi_i((label), (rs), (is)) 603 #define jit_boaddr_l(label, s1, s2) jit_boaddr_i((label), (s1), (s2)) 604 #define jit_boaddi_l(label, rs, is) jit_boaddi_i((label), (rs), (is)) 605 #define jit_bosubr_l(label, s1, s2) jit_bosubr_i((label), (s1), (s2)) 606 #define jit_bosubi_l(label, rs, is) jit_bosubi_i((label), (rs), (is)) 607 #define jit_bomulr_l(label, s1, s2) jit_bomulr_i((label), (s1), (s2)) 608 #define jit_bltr_ul(label, s1, s2) jit_bltr_ui((label), (s1), (s2)) 609 #define jit_blti_ul(label, rs, is) jit_blti_ui((label), (rs), (is)) 610 #define jit_bler_ul(label, s1, s2) jit_bler_ui((label), (s1), (s2)) 611 #define jit_blei_ul(label, rs, is) jit_blei_ui((label), (rs), (is)) 612 #define jit_bgtr_ul(label, s1, s2) jit_bgtr_ui((label), (s1), (s2)) 613 #define jit_bgti_ul(label, rs, is) jit_bgti_ui((label), (rs), (is)) 614 #define jit_bger_ul(label, s1, s2) jit_bger_ui((label), (s1), (s2)) 615 #define jit_bgei_ul(label, rs, is) jit_bgei_ui((label), (rs), (is)) 616 #define jit_boaddr_ul(label, s1, s2) jit_boaddr_ui((label), (s1), (s2)) 617 #define jit_boaddi_ul(label, rs, is) jit_boaddi_ui((label), (rs), (is)) 618 #define jit_bosubr_ul(label, s1, s2) jit_bosubr_ui((label), (s1), (s2)) 619 #define jit_bosubi_ul(label, rs, is) jit_bosubi_ui((label), (rs), (is)) 620 621 #define jit_retval_l(rd) jit_retval_i((rd)) 622 623 #endif 624 625 #endif /* __lightning_core_common_h_ */ 626