Annotation of previous_trunk/src/cpu/jit/compemu.h, revision 1.1

1.1     ! root        1: 
        !             2: #include "flags_x86.h"
        !             3: 
        !             4: #ifdef CPU_64_BIT
        !             5: typedef uae_u64 uintptr;
        !             6: #else
        !             7: typedef uae_u32 uintptr;
        !             8: #endif
        !             9: 
        !            10: /* Flags for Bernie during development/debugging. Should go away eventually */
        !            11: #define DISTRUST_CONSISTENT_MEM 0
        !            12: #define TAGMASK 0x000fffff
        !            13: #define TAGSIZE (TAGMASK+1)
        !            14: #define MAXRUN 1024
        !            15: 
        !            16: extern uae_u8* start_pc_p;
        !            17: extern uae_u32 start_pc;
        !            18: 
        !            19: #define cacheline(x) (((uae_u32)x)&TAGMASK)
        !            20: 
        !            21: typedef struct {
        !            22:   uae_u16* location;
        !            23:   uae_u8  cycles;
        !            24:   uae_u8  specmem;
        !            25:   uae_u8  dummy2;
        !            26:   uae_u8  dummy3;
        !            27: } cpu_history;
        !            28: 
        !            29: struct blockinfo_t;
        !            30: 
        !            31: typedef union {
        !            32:     cpuop_func* handler;
        !            33:     struct blockinfo_t* bi;
        !            34: } cacheline;
        !            35: 
        !            36: extern signed long pissoff;
        !            37: 
        !            38: #define USE_OPTIMIZER 0
        !            39: #define USE_LOW_OPTIMIZER 0
        !            40: #define USE_ALIAS 1
        !            41: #define USE_F_ALIAS 1
        !            42: #define USE_SOFT_FLUSH 1
        !            43: #define USE_OFFSET 1
        !            44: #define COMP_DEBUG 1
        !            45: 
        !            46: #if COMP_DEBUG
        !            47: #define Dif(x) if (x)
        !            48: #else
        !            49: #define Dif(x) if (0)
        !            50: #endif
        !            51: 
        !            52: #define SCALE 2
        !            53: #define MAXCYCLES 1000
        !            54: #define MAXREGOPT 65536
        !            55: 
        !            56: #define BYTES_PER_INST 10240  /* paranoid ;-) */
        !            57: #define LONGEST_68K_INST 16 /* The number of bytes the longest possible
        !            58:                               68k instruction takes */
        !            59: #define MAX_CHECKSUM_LEN 2048 /* The maximum size we calculate checksums
        !            60:                                 for. Anything larger will be flushed
        !            61:                                 unconditionally even with SOFT_FLUSH */
        !            62: #define MAX_HOLD_BI 3  /* One for the current block, and up to two
        !            63:                          for jump targets */
        !            64: 
        !            65: #define INDIVIDUAL_INST 0
        !            66: #define FLAG_C    0x0010
        !            67: #define FLAG_V    0x0008
        !            68: #define FLAG_Z    0x0004
        !            69: #define FLAG_N    0x0002
        !            70: #define FLAG_X    0x0001
        !            71: #define FLAG_CZNV (FLAG_C | FLAG_Z | FLAG_N | FLAG_V)
        !            72: #define FLAG_ZNV  (FLAG_Z | FLAG_N | FLAG_V)
        !            73: 
        !            74: #define KILLTHERAT 1  /* Set to 1 to avoid some partial_rat_stalls */
        !            75: 
        !            76: /* Whether to preserve registers across calls to JIT compiled routines */
        !            77: #if defined X86_ASSEMBLY
        !            78: #define USE_PUSH_POP 0
        !            79: #else
        !            80: #define USE_PUSH_POP 1
        !            81: #endif
        !            82: 
        !            83: #define N_REGS 8  /* really only 7, but they are numbered 0,1,2,3,5,6,7 */
        !            84: #define N_FREGS 6 /* That leaves us two positions on the stack to play with */
        !            85: 
        !            86: /* Functions exposed to newcpu, or to what was moved from newcpu.c to
        !            87:  * compemu_support.c */
        !            88: void init_comp(void);
        !            89: void flush(int save_regs);
        !            90: void small_flush(int save_regs);
        !            91: void set_target(uae_u8* t);
        !            92: void freescratch(void);
        !            93: void build_comp(void);
        !            94: void set_cache_state(int enabled);
        !            95: int get_cache_state(void);
        !            96: uae_u32 get_jitted_size(void);
        !            97: #ifdef JIT
        !            98: void flush_icache(uaecptr ptr, int n);
        !            99: #endif
        !           100: void alloc_cache(void);
        !           101: void compile_block(cpu_history* pc_hist, int blocklen, int totcyles);
        !           102: int check_for_cache_miss(void);
        !           103: 
        !           104: 
        !           105: #define scaled_cycles(x) (currprefs.m68k_speed==-1?(((x)/SCALE)?(((x)/SCALE<MAXCYCLES?((x)/SCALE):MAXCYCLES)):1):(x))
        !           106: 
        !           107: 
        !           108: extern uae_u32 needed_flags;
        !           109: extern cacheline cache_tags[];
        !           110: extern uae_u8* comp_pc_p;
        !           111: extern void* pushall_call_handler;
        !           112: 
        !           113: #define VREGS 32
        !           114: #define VFREGS 16
        !           115: 
        !           116: #define INMEM 1
        !           117: #define CLEAN 2
        !           118: #define DIRTY 3
        !           119: #define UNDEF 4
        !           120: #define ISCONST 5
        !           121: 
        !           122: typedef struct {
        !           123:   uae_u32* mem;
        !           124:   uae_u32 val;
        !           125:   uae_u8 is_swapped;
        !           126:   uae_u8 status;
        !           127:   uae_u8 realreg;
        !           128:   uae_u8 realind; /* The index in the holds[] array */
        !           129:   uae_u8 needflush;
        !           130:   uae_u8 validsize;
        !           131:   uae_u8 dirtysize;
        !           132:   uae_u8 dummy;
        !           133: } reg_status;
        !           134: 
        !           135: typedef struct {
        !           136:   uae_u32* mem;
        !           137:   double val;
        !           138:   uae_u8 status;
        !           139:   uae_u8 realreg;
        !           140:   uae_u8 realind;
        !           141:   uae_u8 needflush;
        !           142: } freg_status;
        !           143: 
        !           144: typedef struct {
        !           145:     uae_u8 use_flags;
        !           146:     uae_u8 set_flags;
        !           147:     uae_u8 is_jump;
        !           148:     uae_u8 is_addx;
        !           149:     uae_u8 is_const_jump;
        !           150: } op_properties;
        !           151: 
        !           152: extern op_properties prop[65536];
        !           153: 
        !           154: STATIC_INLINE int end_block(uae_u16 opcode)
        !           155: {
        !           156:     return prop[opcode].is_jump ||
        !           157:        (prop[opcode].is_const_jump && !currprefs.comp_constjump);
        !           158: }
        !           159: 
        !           160: #define PC_P 16
        !           161: #define FLAGX 17
        !           162: #define FLAGTMP 18
        !           163: #define NEXT_HANDLER 19
        !           164: #define S1 20
        !           165: #define S2 21
        !           166: #define S3 22
        !           167: #define S4 23
        !           168: #define S5 24
        !           169: #define S6 25
        !           170: #define S7 26
        !           171: #define S8 27
        !           172: #define S9 28
        !           173: #define S10 29
        !           174: #define S11 30
        !           175: #define S12 31
        !           176: 
        !           177: #define FP_RESULT 8
        !           178: #define FS1 9
        !           179: #define FS2 10
        !           180: #define FS3 11
        !           181: 
        !           182: typedef struct {
        !           183:   uae_u32 touched;
        !           184:   uae_s8 holds[VREGS];
        !           185:   uae_u8 nholds;
        !           186:   uae_u8 canbyte;
        !           187:   uae_u8 canword;
        !           188:   uae_u8 locked;
        !           189: } n_status;
        !           190: 
        !           191: typedef struct {
        !           192:     uae_s8 holds;
        !           193:     uae_u8 validsize;
        !           194:     uae_u8 dirtysize;
        !           195: } n_smallstatus;
        !           196: 
        !           197: typedef struct {
        !           198:   uae_u32 touched;
        !           199:   uae_s8 holds[VFREGS];
        !           200:   uae_u8 nholds;
        !           201:   uae_u8 locked;
        !           202: } fn_status;
        !           203: 
        !           204: /* For flag handling */
        !           205: #define NADA 1
        !           206: #define TRASH 2
        !           207: #define VALID 3
        !           208: 
        !           209: /* needflush values */
        !           210: #define NF_SCRATCH   0
        !           211: #define NF_TOMEM     1
        !           212: #define NF_HANDLER   2
        !           213: 
        !           214: typedef struct {
        !           215:     /* Integer part */
        !           216:     reg_status state[VREGS];
        !           217:     n_status   nat[N_REGS];
        !           218:     uae_u32 flags_on_stack;
        !           219:     uae_u32 flags_in_flags;
        !           220:     uae_u32 flags_are_important;
        !           221:     /* FPU part */
        !           222:     freg_status fate[VFREGS];
        !           223:     fn_status   fat[N_FREGS];
        !           224: 
        !           225:     /* x86 FPU part */
        !           226:     uae_s8 spos[N_FREGS];
        !           227:     uae_s8 onstack[6];
        !           228:     uae_s8 tos;
        !           229: } bigstate;
        !           230: 
        !           231: typedef struct {
        !           232:     /* Integer part */
        !           233:     n_smallstatus  nat[N_REGS];
        !           234: } smallstate;
        !           235: 
        !           236: extern bigstate live;
        !           237: extern int touchcnt;
        !           238: 
        !           239: 
        !           240: #define IMMS uae_s32
        !           241: #define IMM uae_u32
        !           242: #define R1  uae_u32
        !           243: #define R2  uae_u32
        !           244: #define R4  uae_u32
        !           245: #define W1  uae_u32
        !           246: #define W2  uae_u32
        !           247: #define W4  uae_u32
        !           248: #define RW1 uae_u32
        !           249: #define RW2 uae_u32
        !           250: #define RW4 uae_u32
        !           251: #define MEMR uae_u32
        !           252: #define MEMW uae_u32
        !           253: #define MEMRW uae_u32
        !           254: 
        !           255: #define FW   uae_u32
        !           256: #define FR   uae_u32
        !           257: #define FRW  uae_u32
        !           258: 
        !           259: #define MIDFUNC(nargs,func,args) void func args
        !           260: #define MENDFUNC(nargs,func,args)
        !           261: #define COMPCALL(func) func
        !           262: 
        !           263: #define LOWFUNC(flags,mem,nargs,func,args) STATIC_INLINE void func args
        !           264: #define LENDFUNC(flags,mem,nargs,func,args)
        !           265: 
        !           266: #if USE_OPTIMIZER
        !           267: #define REGALLOC_O 2
        !           268: #define PEEPHOLE_O 3 /* Has to be >= REGALLOC */
        !           269: #define DECLARE(func) extern void func; extern void do_##func
        !           270: #else
        !           271: #define REGALLOC_O 2000000
        !           272: #define PEEPHOLE_O 2000000
        !           273: #define DECLARE(func) extern void func
        !           274: #endif
        !           275: 
        !           276: 
        !           277: /* What we expose to the outside */
        !           278: DECLARE(bt_l_ri(R4 r, IMM i));
        !           279: DECLARE(bt_l_rr(R4 r, R4 b));
        !           280: DECLARE(btc_l_ri(RW4 r, IMM i));
        !           281: DECLARE(btc_l_rr(RW4 r, R4 b));
        !           282: DECLARE(bts_l_ri(RW4 r, IMM i));
        !           283: DECLARE(bts_l_rr(RW4 r, R4 b));
        !           284: DECLARE(btr_l_ri(RW4 r, IMM i));
        !           285: DECLARE(btr_l_rr(RW4 r, R4 b));
        !           286: DECLARE(mov_l_rm(W4 d, IMM s));
        !           287: DECLARE(call_r(R4 r));
        !           288: DECLARE(sub_l_mi(IMM d, IMM s));
        !           289: DECLARE(mov_l_mi(IMM d, IMM s));
        !           290: DECLARE(mov_w_mi(IMM d, IMM s));
        !           291: DECLARE(mov_b_mi(IMM d, IMM s));
        !           292: DECLARE(rol_b_ri(RW1 r, IMM i));
        !           293: DECLARE(rol_w_ri(RW2 r, IMM i));
        !           294: DECLARE(rol_l_ri(RW4 r, IMM i));
        !           295: DECLARE(rol_l_rr(RW4 d, R1 r));
        !           296: DECLARE(rol_w_rr(RW2 d, R1 r));
        !           297: DECLARE(rol_b_rr(RW1 d, R1 r));
        !           298: DECLARE(shll_l_rr(RW4 d, R1 r));
        !           299: DECLARE(shll_w_rr(RW2 d, R1 r));
        !           300: DECLARE(shll_b_rr(RW1 d, R1 r));
        !           301: DECLARE(ror_b_ri(R1 r, IMM i));
        !           302: DECLARE(ror_w_ri(R2 r, IMM i));
        !           303: DECLARE(ror_l_ri(R4 r, IMM i));
        !           304: DECLARE(ror_l_rr(R4 d, R1 r));
        !           305: DECLARE(ror_w_rr(R2 d, R1 r));
        !           306: DECLARE(ror_b_rr(R1 d, R1 r));
        !           307: DECLARE(shrl_l_rr(RW4 d, R1 r));
        !           308: DECLARE(shrl_w_rr(RW2 d, R1 r));
        !           309: DECLARE(shrl_b_rr(RW1 d, R1 r));
        !           310: DECLARE(shra_l_rr(RW4 d, R1 r));
        !           311: DECLARE(shra_w_rr(RW2 d, R1 r));
        !           312: DECLARE(shra_b_rr(RW1 d, R1 r));
        !           313: DECLARE(shll_l_ri(RW4 r, IMM i));
        !           314: DECLARE(shll_w_ri(RW2 r, IMM i));
        !           315: DECLARE(shll_b_ri(RW1 r, IMM i));
        !           316: DECLARE(shrl_l_ri(RW4 r, IMM i));
        !           317: DECLARE(shrl_w_ri(RW2 r, IMM i));
        !           318: DECLARE(shrl_b_ri(RW1 r, IMM i));
        !           319: DECLARE(shra_l_ri(RW4 r, IMM i));
        !           320: DECLARE(shra_w_ri(RW2 r, IMM i));
        !           321: DECLARE(shra_b_ri(RW1 r, IMM i));
        !           322: DECLARE(setcc(W1 d, IMM cc));
        !           323: DECLARE(setcc_m(IMM d, IMM cc));
        !           324: DECLARE(cmov_b_rr(RW1 d, R1 s, IMM cc));
        !           325: DECLARE(cmov_w_rr(RW2 d, R2 s, IMM cc));
        !           326: DECLARE(cmov_l_rr(RW4 d, R4 s, IMM cc));
        !           327: DECLARE(cmov_l_rm(RW4 d, IMM s, IMM cc));
        !           328: DECLARE(bsf_l_rr(W4 d, R4 s));
        !           329: DECLARE(pop_m(IMM d));
        !           330: DECLARE(push_m(IMM d));
        !           331: DECLARE(pop_l(W4 d));
        !           332: DECLARE(push_l_i(IMM i));
        !           333: DECLARE(push_l(R4 s));
        !           334: DECLARE(clear_16(RW4 r));
        !           335: DECLARE(clear_8(RW4 r));
        !           336: DECLARE(sign_extend_16_rr(W4 d, R2 s));
        !           337: DECLARE(sign_extend_8_rr(W4 d, R1 s));
        !           338: DECLARE(zero_extend_16_rr(W4 d, R2 s));
        !           339: DECLARE(zero_extend_8_rr(W4 d, R1 s));
        !           340: DECLARE(imul_64_32(RW4 d, RW4 s));
        !           341: DECLARE(mul_64_32(RW4 d, RW4 s));
        !           342: DECLARE(imul_32_32(RW4 d, R4 s));
        !           343: DECLARE(mov_b_rr(W1 d, R1 s));
        !           344: DECLARE(mov_w_rr(W2 d, R2 s));
        !           345: DECLARE(mov_l_rrm_indexed(W4 d, R4 baser, R4 index));
        !           346: DECLARE(mov_w_rrm_indexed(W2 d, R4 baser, R4 index));
        !           347: DECLARE(mov_b_rrm_indexed(W1 d, R4 baser, R4 index));
        !           348: DECLARE(mov_l_mrr_indexed(R4 baser, R4 index, R4 s));
        !           349: DECLARE(mov_w_mrr_indexed(R4 baser, R4 index, R2 s));
        !           350: DECLARE(mov_b_mrr_indexed(R4 baser, R4 index, R1 s));
        !           351: DECLARE(mov_l_rm_indexed(W4 d, IMM base, R4 index));
        !           352: DECLARE(mov_l_rR(W4 d, R4 s, IMM offset));
        !           353: DECLARE(mov_w_rR(W2 d, R4 s, IMM offset));
        !           354: DECLARE(mov_b_rR(W1 d, R4 s, IMM offset));
        !           355: DECLARE(mov_l_brR(W4 d, R4 s, IMM offset));
        !           356: DECLARE(mov_w_brR(W2 d, R4 s, IMM offset));
        !           357: DECLARE(mov_b_brR(W1 d, R4 s, IMM offset));
        !           358: DECLARE(mov_l_Ri(R4 d, IMM i, IMM offset));
        !           359: DECLARE(mov_w_Ri(R4 d, IMM i, IMM offset));
        !           360: DECLARE(mov_b_Ri(R4 d, IMM i, IMM offset));
        !           361: DECLARE(mov_l_Rr(R4 d, R4 s, IMM offset));
        !           362: DECLARE(mov_w_Rr(R4 d, R2 s, IMM offset));
        !           363: DECLARE(mov_b_Rr(R4 d, R1 s, IMM offset));
        !           364: DECLARE(lea_l_brr(W4 d, R4 s, IMM offset));
        !           365: DECLARE(lea_l_brr_indexed(W4 d, R4 s, R4 index, IMM factor, IMM offset));
        !           366: DECLARE(mov_l_bRr(R4 d, R4 s, IMM offset));
        !           367: DECLARE(mov_w_bRr(R4 d, R2 s, IMM offset));
        !           368: DECLARE(mov_b_bRr(R4 d, R1 s, IMM offset));
        !           369: DECLARE(gen_bswap_32(RW4 r));
        !           370: DECLARE(gen_bswap_16(RW2 r));
        !           371: DECLARE(mov_l_rr(W4 d, R4 s));
        !           372: DECLARE(mov_l_mr(IMM d, R4 s));
        !           373: DECLARE(mov_w_mr(IMM d, R2 s));
        !           374: DECLARE(mov_w_rm(W2 d, IMM s));
        !           375: DECLARE(mov_b_mr(IMM d, R1 s));
        !           376: DECLARE(mov_b_rm(W1 d, IMM s));
        !           377: DECLARE(mov_l_ri(W4 d, IMM s));
        !           378: DECLARE(mov_w_ri(W2 d, IMM s));
        !           379: DECLARE(mov_b_ri(W1 d, IMM s));
        !           380: DECLARE(add_l_mi(IMM d, IMM s) );
        !           381: DECLARE(add_w_mi(IMM d, IMM s) );
        !           382: DECLARE(add_b_mi(IMM d, IMM s) );
        !           383: DECLARE(test_l_ri(R4 d, IMM i));
        !           384: DECLARE(test_l_rr(R4 d, R4 s));
        !           385: DECLARE(test_w_rr(R2 d, R2 s));
        !           386: DECLARE(test_b_rr(R1 d, R1 s));
        !           387: DECLARE(and_l_ri(RW4 d, IMM i));
        !           388: DECLARE(and_l(RW4 d, R4 s));
        !           389: DECLARE(and_w(RW2 d, R2 s));
        !           390: DECLARE(and_b(RW1 d, R1 s));
        !           391: DECLARE(or_l_ri(RW4 d, IMM i));
        !           392: DECLARE(or_l(RW4 d, R4 s));
        !           393: DECLARE(or_w(RW2 d, R2 s));
        !           394: DECLARE(or_b(RW1 d, R1 s));
        !           395: DECLARE(adc_l(RW4 d, R4 s));
        !           396: DECLARE(adc_w(RW2 d, R2 s));
        !           397: DECLARE(adc_b(RW1 d, R1 s));
        !           398: DECLARE(add_l(RW4 d, R4 s));
        !           399: DECLARE(add_w(RW2 d, R2 s));
        !           400: DECLARE(add_b(RW1 d, R1 s));
        !           401: DECLARE(sub_l_ri(RW4 d, IMM i));
        !           402: DECLARE(sub_w_ri(RW2 d, IMM i));
        !           403: DECLARE(sub_b_ri(RW1 d, IMM i));
        !           404: DECLARE(add_l_ri(RW4 d, IMM i));
        !           405: DECLARE(add_w_ri(RW2 d, IMM i));
        !           406: DECLARE(add_b_ri(RW1 d, IMM i));
        !           407: DECLARE(sbb_l(RW4 d, R4 s));
        !           408: DECLARE(sbb_w(RW2 d, R2 s));
        !           409: DECLARE(sbb_b(RW1 d, R1 s));
        !           410: DECLARE(sub_l(RW4 d, R4 s));
        !           411: DECLARE(sub_w(RW2 d, R2 s));
        !           412: DECLARE(sub_b(RW1 d, R1 s));
        !           413: DECLARE(cmp_l(R4 d, R4 s));
        !           414: DECLARE(cmp_l_ri(R4 r, IMM i));
        !           415: DECLARE(cmp_w(R2 d, R2 s));
        !           416: DECLARE(cmp_b(R1 d, R1 s));
        !           417: DECLARE(xor_l(RW4 d, R4 s));
        !           418: DECLARE(xor_w(RW2 d, R2 s));
        !           419: DECLARE(xor_b(RW1 d, R1 s));
        !           420: DECLARE(live_flags(void));
        !           421: DECLARE(dont_care_flags(void));
        !           422: DECLARE(duplicate_carry(void));
        !           423: DECLARE(restore_carry(void));
        !           424: DECLARE(start_needflags(void));
        !           425: DECLARE(end_needflags(void));
        !           426: DECLARE(make_flags_live(void));
        !           427: DECLARE(call_r_11(R4 r, W4 out1, R4 in1, IMM osize, IMM isize));
        !           428: DECLARE(call_r_02(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2));
        !           429: DECLARE(readmem_new(R4 address, W4 dest, IMM offset, IMM size, W4 tmp));
        !           430: DECLARE(writemem_new(R4 address, R4 source, IMM offset, IMM size, W4 tmp));
        !           431: DECLARE(forget_about(W4 r));
        !           432: DECLARE(nop(void));
        !           433: 
        !           434: DECLARE(f_forget_about(FW r));
        !           435: DECLARE(fmov_pi(FW r));
        !           436: DECLARE(fmov_log10_2(FW r));
        !           437: DECLARE(fmov_log2_e(FW r));
        !           438: DECLARE(fmov_loge_2(FW r));
        !           439: DECLARE(fmov_1(FW r));
        !           440: DECLARE(fmov_0(FW r));
        !           441: DECLARE(fmov_rm(FW r, MEMR m));
        !           442: DECLARE(fmov_mr(MEMW m, FR r));
        !           443: DECLARE(fmovi_rm(FW r, MEMR m));
        !           444: DECLARE(fmovi_mrb(MEMW m, FR r, double *bounds));
        !           445: DECLARE(fmovs_rm(FW r, MEMR m));
        !           446: DECLARE(fmovs_mr(MEMW m, FR r));
        !           447: DECLARE(fcuts_r(FRW r));
        !           448: DECLARE(fcut_r(FRW r));
        !           449: DECLARE(fmovl_ri(FW r, IMMS i));
        !           450: DECLARE(fmovs_ri(FW r, IMM i));
        !           451: DECLARE(fmov_ri(FW r, IMM i1, IMM i2));
        !           452: DECLARE(fmov_ext_ri(FW r, IMM i1, IMM i2, IMM i3));
        !           453: DECLARE(fmov_ext_mr(MEMW m, FR r));
        !           454: DECLARE(fmov_ext_rm(FW r, MEMR m));
        !           455: DECLARE(fmov_rr(FW d, FR s));
        !           456: DECLARE(fldcw_m_indexed(R4 index, IMM base));
        !           457: DECLARE(ftst_r(FR r));
        !           458: DECLARE(dont_care_fflags(void));
        !           459: DECLARE(fsqrt_rr(FW d, FR s));
        !           460: DECLARE(fabs_rr(FW d, FR s));
        !           461: DECLARE(frndint_rr(FW d, FR s));
        !           462: DECLARE(fgetexp_rr(FW d, FR s));
        !           463: DECLARE(fgetman_rr(FW d, FR s));
        !           464: DECLARE(fsin_rr(FW d, FR s));
        !           465: DECLARE(fcos_rr(FW d, FR s));
        !           466: DECLARE(ftan_rr(FW d, FR s));
        !           467: DECLARE(fsincos_rr(FW d, FW c, FR s));
        !           468: DECLARE(fscale_rr(FRW d, FR s));
        !           469: DECLARE(ftwotox_rr(FW d, FR s));
        !           470: DECLARE(fetox_rr(FW d, FR s));
        !           471: DECLARE(fetoxM1_rr(FW d, FR s));
        !           472: DECLARE(ftentox_rr(FW d, FR s));
        !           473: DECLARE(flog2_rr(FW d, FR s));
        !           474: DECLARE(flogN_rr(FW d, FR s));
        !           475: DECLARE(flogNP1_rr(FW d, FR s));
        !           476: DECLARE(flog10_rr(FW d, FR s));
        !           477: DECLARE(fasin_rr(FW d, FR s));
        !           478: DECLARE(facos_rr(FW d, FR s));
        !           479: DECLARE(fatan_rr(FW d, FR s));
        !           480: DECLARE(fatanh_rr(FW d, FR s));
        !           481: DECLARE(fsinh_rr(FW d, FR s));
        !           482: DECLARE(fcosh_rr(FW d, FR s));
        !           483: DECLARE(ftanh_rr(FW d, FR s));
        !           484: DECLARE(fneg_rr(FW d, FR s));
        !           485: DECLARE(fadd_rr(FRW d, FR s));
        !           486: DECLARE(fsub_rr(FRW d, FR s));
        !           487: DECLARE(fmul_rr(FRW d, FR s));
        !           488: DECLARE(frem_rr(FRW d, FR s));
        !           489: DECLARE(frem1_rr(FRW d, FR s));
        !           490: DECLARE(fdiv_rr(FRW d, FR s));
        !           491: DECLARE(fcmp_rr(FR d, FR s));
        !           492: DECLARE(fflags_into_flags(W2 tmp));
        !           493: 
        !           494: extern int failure;
        !           495: #define FAIL(x) do { failure|=x; } while (0)
        !           496: 
        !           497: /* Convenience functions exposed to gencomp */
        !           498: extern uae_u32 m68k_pc_offset;
        !           499: void readbyte(int address, int dest, int tmp);
        !           500: void readword(int address, int dest, int tmp);
        !           501: void readlong(int address, int dest, int tmp);
        !           502: void writebyte(int address, int source, int tmp);
        !           503: void writeword(int address, int source, int tmp);
        !           504: void writelong(int address, int source, int tmp);
        !           505: void writeword_clobber(int address, int source, int tmp);
        !           506: void writelong_clobber(int address, int source, int tmp);
        !           507: void get_n_addr(int address, int dest, int tmp);
        !           508: void get_n_addr_jmp(int address, int dest, int tmp);
        !           509: void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp);
        !           510: int kill_rodent(int r);
        !           511: void sync_m68k_pc(void);
        !           512: uae_u32 get_const(int r);
        !           513: int  is_const(int r);
        !           514: void register_branch(uae_u32 not_taken, uae_u32 taken, uae_u8 cond);
        !           515: void empty_optimizer(void);
        !           516: 
        !           517: #define comp_get_ibyte(o) do_get_mem_byte((uae_u8 *)(comp_pc_p + (o) + 1))
        !           518: #define comp_get_iword(o) do_get_mem_word((uae_u16 *)(comp_pc_p + (o)))
        !           519: #define comp_get_ilong(o) do_get_mem_long((uae_u32 *)(comp_pc_p + (o)))
        !           520: 
        !           521: struct blockinfo_t;
        !           522: 
        !           523: typedef struct dep_t {
        !           524:   uae_u32*            jmp_off;
        !           525:   struct blockinfo_t* target;
        !           526:   struct dep_t**      prev_p;
        !           527:   struct dep_t*       next;
        !           528: } dependency;
        !           529: 
        !           530: typedef struct blockinfo_t {
        !           531:     uae_s32 count;
        !           532:     cpuop_func* direct_handler_to_use;
        !           533:     cpuop_func* handler_to_use;
        !           534:     /* The direct handler does not check for the correct address */
        !           535: 
        !           536:     cpuop_func* handler;
        !           537:     cpuop_func* direct_handler;
        !           538: 
        !           539:     cpuop_func* direct_pen;
        !           540:     cpuop_func* direct_pcc;
        !           541: 
        !           542:     uae_u8* nexthandler;
        !           543:     uae_u8* pc_p;
        !           544: 
        !           545:     uae_u32 c1;
        !           546:     uae_u32 c2;
        !           547:     uae_u32 len;
        !           548: 
        !           549:     struct blockinfo_t* next_same_cl;
        !           550:     struct blockinfo_t** prev_same_cl_p;
        !           551:     struct blockinfo_t* next;
        !           552:     struct blockinfo_t** prev_p;
        !           553: 
        !           554:     uae_u32 min_pcp;
        !           555:     uae_u8 optlevel;
        !           556:     uae_u8 needed_flags;
        !           557:     uae_u8 status;
        !           558:     uae_u8 havestate;
        !           559: 
        !           560:     dependency  dep[2];  /* Holds things we depend on */
        !           561:     dependency* deplist; /* List of things that depend on this */
        !           562:     smallstate  env;
        !           563: } blockinfo;
        !           564: 
        !           565: #define BI_NEW 0
        !           566: #define BI_COUNTING 1
        !           567: #define BI_TARGETTED 2
        !           568: 
        !           569: typedef struct {
        !           570:     uae_u8 type;
        !           571:     uae_u8 reg;
        !           572:     uae_u32 next;
        !           573: } regacc;
        !           574: 
        !           575: void execute_normal(void);
        !           576: void exec_nostats(void);
        !           577: void do_nothing(void);
        !           578: 
        !           579: void comp_fdbcc_opp (uae_u32 opcode, uae_u16 extra);
        !           580: void comp_fscc_opp (uae_u32 opcode, uae_u16 extra);
        !           581: void comp_ftrapcc_opp (uae_u32 opcode, uaecptr oldpc);
        !           582: void comp_fbcc_opp (uae_u32 opcode);
        !           583: void comp_fsave_opp (uae_u32 opcode);
        !           584: void comp_frestore_opp (uae_u32 opcode);
        !           585: void comp_fpp_opp (uae_u32 opcode, uae_u16 extra);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.