1#ifndef _NSEEL_GLUE_ARM_H_
2#define _NSEEL_GLUE_ARM_H_
22#define GLUE_HAS_FPREG2 1
33#define GLUE_MAX_SPILL_REGS 8
34#define GLUE_SAVE_TO_SPILL_SIZE(x) (4)
35#define GLUE_RESTORE_SPILL_TO_FPREG2_SIZE(x) (4)
39 *(
unsigned int *)
b = 0xeeb01b48 + ws;
43 *(
unsigned int *)
b = 0xeeb08b40 + (ws<<12);
47#define GLUE_MAX_FPSTACK_SIZE 0
48#define GLUE_MAX_JMPSIZE ((1<<25) - 1024)
52#define GLUE_JMP_SET_OFFSET(endOfInstruction,offset) (((int *)(endOfInstruction))[-1] = (((int *)(endOfInstruction))[-1]&0xFF000000)|((((offset)>>2)-1)))
69#define GLUE_MOV_PX_DIRECTVALUE_TOFPREG2_SIZE 12
70#define GLUE_MOV_PX_DIRECTVALUE_SIZE 8
74 const unsigned int reg_add =
wdl_max(wv,0) << 12;
75 static const unsigned int tab[2] = {
80 unsigned int *
p=(
unsigned int *)
b;
81 p[0] = tab[0] | reg_add | (
v&0xfff) | ((
v&0xf000)<<4);
82 p[1] = tab[1] | reg_add | ((
v>>16)&0xfff) | ((
v&0xf0000000)>>12);
83 if (wv == -2)
p[2] = 0xed901b00;
87#define GLUE_FUNC_ENTER_SIZE 4
89#define GLUE_FUNC_LEAVE_SIZE 0
90const static unsigned int GLUE_RET[]={ 0xe8bd8010 };
94 const static unsigned int GLUE_SET_WTP_FROM_R8 = 0xe1a05008;
95 if (
out)
memcpy(
out,&GLUE_SET_WTP_FROM_R8,
sizeof(GLUE_SET_WTP_FROM_R8));
96 return sizeof(GLUE_SET_WTP_FROM_R8);
106 while (amt >= 0x100 && nrot > 1)
112 return ((nrot&15) << 8) | amt;
116#define GLUE_STORE_P1_TO_STACK_AT_OFFS_SIZE(x) ((x)>=4096 ? 8 : 4)
124 ((
unsigned int *)
b)[1] = 0xe5820000 + (offs&4095);
129 *(
unsigned int *)
b = 0xe58d0000 + offs;
133#define GLUE_MOVE_PX_STACKPTR_SIZE 4
137 *(
unsigned int *)
b = 0xe1a0000d + (wv<<12);
140#define GLUE_MOVE_STACK_SIZE 4
143 unsigned int instr = 0xe28dd000;
152#define GLUE_POP_PX_SIZE 4
155 ((
unsigned int *)
b)[0] = 0xe49d0008 | (wv<<12);
158#define GLUE_SET_PX_FROM_P1_SIZE 4
161 *(
unsigned int *)
b = 0xe1a00000 | (wv<<12);
176 unsigned int *bufptr = (
unsigned int *)buf;
177 *bufptr++ = 0xed9d7b00;
178 *bufptr++ = 0xe28dd008;
181 *bufptr++ = 0xed807b00;
190 unsigned int *bufptr = (
unsigned int *)buf;
191 *bufptr++ = 0xed907b00;
194 *bufptr++ = 0xed807b00;
201#define GLUE_CALL_CODE(bp, cp, rt) do { \
203 if (!(h->compile_flags&NSEEL_CODE_COMPILE_FLAG_NOFPSTATE) && \
204 !((f=glue_getscr())&(1<<24))) { \
205 glue_setscr(f|(1<<24)); \
206 eel_callcode32(bp, cp, rt); \
208 } else eel_callcode32(bp, cp, rt);\
235 "r5",
"r6",
"r7",
"r8",
"r10",
236 "d8",
"d9",
"d10",
"d11",
"d12",
"d13",
"d14",
"d15");
242 unsigned int *
p=(
unsigned int *)_p;
243 while ((
p[0]&0x000F0FFF) != 0x000d0ead &&
244 (
p[1]&0x000F0FFF) != 0x000b0eef)
p++;
245 p[0] = (
p[0]&0xFFF0F000) | (newv&0xFFF) | ((newv << 4) & 0xF0000);
246 p[1] = (
p[1]&0xFFF0F000) | ((newv>>16)&0xFFF) | ((newv >> 12)&0xF0000);
248 return (
unsigned char *)(
p+1);
251#define GLUE_SET_PX_FROM_WTP_SIZE sizeof(int)
254 *(
unsigned int *)
b = 0xe1a00005 + (wv<<12);
261 unsigned int *bufptr = (
unsigned int *)buf;
265 *bufptr++ = 0xed800b00;
270#define GLUE_POP_FPSTACK_SIZE 0
283#define GLUE_PUSH_VAL_AT_PX_TO_FPSTACK_SIZE 4
286 *(
unsigned int *)
b = 0xed900b00 + (wv<<16);
289#define GLUE_POP_FPSTACK_TO_WTP_TO_PX_SIZE (sizeof(GLUE_POP_FPSTACK_TO_WTP) + GLUE_SET_PX_FROM_WTP_SIZE)
302 static const unsigned int sig[3] = { 0xe1a00000, 0xe1a01001, 0xe1a02002 };
303 unsigned char *
p = (
unsigned char *)
fn;
305 while (memcmp(
p,sig,
sizeof(sig)))
p+=4;
309 while (memcmp(
p,sig,
sizeof(sig)))
p+=4;
310 *
size =
p - (
unsigned char *)
fn;
317 asm volatile (
"fmrx %0, fpscr" :
"=r" (rv));
322 asm volatile (
"fmxr fpscr, %0" ::
"r"(
v));
327 s[0] = glue_getscr();
328 glue_setscr(
s[0] | (1<<24));
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned s
Definition inflate.c:1555
void(* eel_leavefp)(int s[2])
Definition eel_import.h:43
void(* eel_enterfp)(int s[2])
Definition eel_import.h:42
static const unsigned int GLUE_PUSH_P1PTR_AS_VALUE[]
Definition glue_aarch64.h:183
static const unsigned int GLUE_POP_FPSTACK_TOSTACK[]
Definition glue_aarch64.h:303
static const unsigned int GLUE_POP_FPSTACK[1]
Definition glue_aarch64.h:301
#define GLUE_SET_PX_FROM_WTP_SIZE
Definition glue_aarch64.h:281
static const unsigned int GLUE_FUNC_LEAVE[1]
Definition glue_aarch64.h:106
static const unsigned int GLUE_POP_FPSTACK_TO_WTP[]
Definition glue_aarch64.h:308
#define GLUE_MOV_PX_DIRECTVALUE_SIZE
Definition glue_aarch64.h:86
static const unsigned int GLUE_JMP_NC[]
Definition glue_aarch64.h:72
static unsigned int GLUE_POP_STACK_TO_FPREG2[]
Definition glue_aarch64.h:46
static const unsigned int GLUE_JMP_IF_P1_NZ[]
Definition glue_aarch64.h:79
static const unsigned int GLUE_FUNC_ENTER[2]
Definition glue_aarch64.h:104
static const unsigned int GLUE_SET_P1_Z[]
Definition glue_aarch64.h:325
static const unsigned int GLUE_RET[]
Definition glue_aarch64.h:108
static const unsigned int GLUE_JMP_IF_P1_Z[]
Definition glue_aarch64.h:74
static const unsigned int GLUE_COPY_FPSTACK_TO_FPREG2[]
Definition glue_aarch64.h:45
static const unsigned int GLUE_PUSH_P1[1]
Definition glue_aarch64.h:118
static const unsigned int GLUE_SET_P1_NZ[]
Definition glue_aarch64.h:326
static void GLUE_MOVE_STACK(void *b, int amt)
Definition glue_arm.h:141
static void GLUE_SET_PX_FROM_WTP(void *b, int wv)
Definition glue_arm.h:252
static void GLUE_POP_FPSTACK_TO_WTP_TO_PX(unsigned char *buf, int wv)
Definition glue_arm.h:290
static void GLUE_MOV_PX_DIRECTVALUE_GEN(void *b, INT_PTR v, int wv)
Definition glue_arm.h:71
INT_PTR INT_PTR rt
Definition glue_arm.h:222
static void GLUE_RESTORE_SPILL_TO_FPREG2(void *b, int ws)
Definition glue_arm.h:37
static void * GLUE_realAddress(void *fn, int *size)
Definition glue_arm.h:300
static int GLUE_RESET_WTP(unsigned char *out, void *ptr)
Definition glue_arm.h:92
static int arm_encode_constforalu(int amt)
Definition glue_arm.h:103
static int GLUE_POP_VALUE_TO_ADDR(unsigned char *buf, void *destptr)
Definition glue_arm.h:172
static void GLUE_SAVE_TO_SPILL(void *b, int ws)
Definition glue_arm.h:41
static void GLUE_MOVE_PX_STACKPTR_GEN(void *b, int wv)
Definition glue_arm.h:134
static const double __consttab[]
Definition glue_arm.h:211
static void GLUE_STORE_P1_TO_STACK_AT_OFFS(void *b, int offs)
Definition glue_arm.h:117
static void GLUE_POP_PX(void *b, int wv)
Definition glue_arm.h:153
__attribute__((target("arm"))) static void eel_callcode32(INT_PTR bp
static int GLUE_POP_FPSTACK_TO_PTR(unsigned char *buf, void *destptr)
Definition glue_arm.h:257
static unsigned char * EEL_GLUE_set_immediate(void *_p, INT_PTR newv)
Definition glue_arm.h:240
static void GLUE_PUSH_VAL_AT_PX_TO_FPSTACK(void *b, int wv)
Definition glue_arm.h:284
static void GLUE_SET_PX_FROM_P1(void *b, int wv)
Definition glue_arm.h:159
static int GLUE_COPY_VALUE_AT_P1_TO_PTR(unsigned char *buf, void *destptr)
Definition glue_arm.h:186
static void eel_callcode32(INT_PTR cp, INT_PTR ramptr)
Definition glue_x86.h:232
float out
Definition lilv_test.c:1461
#define NSEEL_CLOSEFACTOR
Definition ns-eel-int.h:101
const char const char const char const char char * fn
Definition swell-functions.h:168
intptr_t INT_PTR
Definition swell-types.h:42
uch * p
Definition crypt.c:594
memcpy(hh, h, RAND_HEAD_LEN)
char * cp
Definition unix.c:513
typedef int(UZ_EXP MsgFn)()
#define wdl_max(x, y)
Definition wdltypes.h:106