#include "jit-internal.h"
#if defined(__alpha) || defined(__alpha__)
#include "jit-gen-alpha.h"
void _jit_create_closure(unsigned char *buf, void *func, void *closure, void *_type) {
alpha_inst inst = (alpha_inst) buf;
alpha_ldah(inst,ALPHA_GP,ALPHA_PV,0);
alpha_lda( inst,ALPHA_GP,ALPHA_GP,0);
alpha_lda(inst,ALPHA_SP,ALPHA_SP,-(13*8));
alpha_stq(inst,ALPHA_RA,ALPHA_SP,0*8);
alpha_stq(inst,ALPHA_A0,ALPHA_SP,1*8);
alpha_stq(inst,ALPHA_A1,ALPHA_SP,2*8);
alpha_stq(inst,ALPHA_A2,ALPHA_SP,3*8);
alpha_stq(inst,ALPHA_A3,ALPHA_SP,4*8);
alpha_stq(inst,ALPHA_A4,ALPHA_SP,5*8);
alpha_stq(inst,ALPHA_A5,ALPHA_SP,6*8);
alpha_stt(inst,ALPHA_FA0,ALPHA_SP, 7*8);
alpha_stt(inst,ALPHA_FA1,ALPHA_SP, 8*8);
alpha_stt(inst,ALPHA_FA2,ALPHA_SP, 9*8);
alpha_stt(inst,ALPHA_FA3,ALPHA_SP,10*8);
alpha_stt(inst,ALPHA_FA4,ALPHA_SP,11*8);
alpha_stt(inst,ALPHA_FA5,ALPHA_SP,12*8);
alpha_call(inst,func);
alpha_ldq(inst,ALPHA_RA,ALPHA_SP,0*8);
alpha_ldq(inst,ALPHA_A0,ALPHA_SP,1*8);
alpha_ldq(inst,ALPHA_A1,ALPHA_SP,2*8);
alpha_ldq(inst,ALPHA_A2,ALPHA_SP,3*8);
alpha_ldq(inst,ALPHA_A3,ALPHA_SP,4*8);
alpha_ldq(inst,ALPHA_A4,ALPHA_SP,5*8);
alpha_ldq(inst,ALPHA_A5,ALPHA_SP,6*8);
alpha_ldt(inst,ALPHA_FA0,ALPHA_SP, 7*8);
alpha_ldt(inst,ALPHA_FA1,ALPHA_SP, 8*8);
alpha_ldt(inst,ALPHA_FA2,ALPHA_SP, 9*8);
alpha_ldt(inst,ALPHA_FA3,ALPHA_SP,10*8);
alpha_ldt(inst,ALPHA_FA4,ALPHA_SP,11*8);
alpha_ldt(inst,ALPHA_FA5,ALPHA_SP,12*8);
alpha_lda(inst,ALPHA_SP,ALPHA_SP,(13*8));
}
void *_jit_create_redirector(unsigned char *buf, void *func, void *user_data, int abi) {
alpha_inst inst = (alpha_inst) buf;
alpha_lda(inst,ALPHA_SP,ALPHA_SP,-(16*8));
alpha_stq(inst,ALPHA_RA,ALPHA_SP,0*8);
alpha_stq(inst,ALPHA_FP,ALPHA_SP,1*8);
alpha_stq(inst,ALPHA_S0,ALPHA_SP,2*8);
alpha_stq(inst,ALPHA_S1,ALPHA_SP,3*8);
alpha_stq(inst,ALPHA_S2,ALPHA_SP,4*8);
alpha_stq(inst,ALPHA_S3,ALPHA_SP,5*8);
alpha_stq(inst,ALPHA_S4,ALPHA_SP,6*8);
alpha_stq(inst,ALPHA_S5,ALPHA_SP,7*8);
alpha_stt(inst,ALPHA_FS0,ALPHA_SP, 8*8);
alpha_stt(inst,ALPHA_FS1,ALPHA_SP, 9*8);
alpha_stt(inst,ALPHA_FS2,ALPHA_SP,10*8);
alpha_stt(inst,ALPHA_FS3,ALPHA_SP,11*8);
alpha_stt(inst,ALPHA_FS4,ALPHA_SP,12*8);
alpha_stt(inst,ALPHA_FS5,ALPHA_SP,13*8);
alpha_stt(inst,ALPHA_FS6,ALPHA_SP,14*8);
alpha_stt(inst,ALPHA_FS7,ALPHA_SP,15*8);
alpha_mov(inst,ALPHA_SP,ALPHA_FP);
alpha_ldah(inst,ALPHA_GP,ALPHA_PV,0);
alpha_lda( inst,ALPHA_GP,ALPHA_GP,0);
alpha_trapb(inst);
alpha_call(inst, func);
alpha_ldq(inst,ALPHA_RA,ALPHA_SP,0*8);
alpha_ldq(inst,ALPHA_FP,ALPHA_SP,1*8);
alpha_ldq(inst,ALPHA_S0,ALPHA_SP,2*8);
alpha_ldq(inst,ALPHA_S1,ALPHA_SP,3*8);
alpha_ldq(inst,ALPHA_S2,ALPHA_SP,4*8);
alpha_ldq(inst,ALPHA_S3,ALPHA_SP,5*8);
alpha_ldq(inst,ALPHA_S4,ALPHA_SP,6*8);
alpha_ldq(inst,ALPHA_S5,ALPHA_SP,7*8);
alpha_ldt(inst,ALPHA_FS0,ALPHA_SP, 8*8);
alpha_ldt(inst,ALPHA_FS1,ALPHA_SP, 9*8);
alpha_ldt(inst,ALPHA_FS2,ALPHA_SP,10*8);
alpha_ldt(inst,ALPHA_FS3,ALPHA_SP,11*8);
alpha_ldt(inst,ALPHA_FS4,ALPHA_SP,12*8);
alpha_ldt(inst,ALPHA_FS5,ALPHA_SP,13*8);
alpha_ldt(inst,ALPHA_FS6,ALPHA_SP,14*8);
alpha_ldt(inst,ALPHA_FS7,ALPHA_SP,15*8);
alpha_lda(inst,ALPHA_SP,ALPHA_SP,16*8);
alpha_trapb(inst);
alpha_jsr(inst,ALPHA_RA,ALPHA_V0,1);
return (void *)buf;
}
void _jit_pad_buffer(unsigned char *buf, int len) {
alpha_inst inst = (alpha_inst) buf;
if (len > 0) {
do {
alpha_nop(inst);
} while (--len);
}
}
#endif