Annotation of uae/src/md-i386-gcc/maccess.h, revision 1.1.1.5

1.1.1.5 ! root        1:  /*
1.1       root        2:   * UAE - The Un*x Amiga Emulator
1.1.1.5 ! root        3:   *
1.1       root        4:   * Memory access functions
                      5:   *
                      6:   * Copyright 1996 Bernd Schmidt
                      7:   */
                      8: 
1.1.1.4   root        9: STATIC_INLINE uae_u32 do_get_mem_long (uae_u32 *a)
1.1       root       10: {
                     11:     uae_u32 retval;
                     12: 
1.1.1.3   root       13:     __asm__ ("bswap %0" : "=r" (retval) : "0" (*a) : "cc");
1.1       root       14:     return retval;
                     15: }
                     16: 
1.1.1.4   root       17: STATIC_INLINE uae_u32 do_get_mem_word (uae_u16 *a)
1.1       root       18: {
                     19:     uae_u32 retval;
                     20: 
                     21: #ifdef X86_PPRO_OPT
1.1.1.3   root       22:     __asm__ ("movzwl %w1,%k0\n\tshll $16,%k0\n\tbswap %k0\n" : "=&r" (retval) : "m" (*a) : "cc");
1.1       root       23: #else
                     24:     __asm__ ("xorl %k0,%k0\n\tmovw %w1,%w0\n\trolw $8,%w0" : "=&r" (retval) : "m" (*a) : "cc");
                     25: #endif
                     26:     return retval;
                     27: }
                     28: 
                     29: #define do_get_mem_byte(a) ((uae_u32)*((uae_u8 *)a))
                     30: 
1.1.1.4   root       31: STATIC_INLINE void do_put_mem_long (uae_u32 *a, uae_u32 v)
1.1       root       32: {
1.1.1.3   root       33:     __asm__ ("bswap %0" : "=r" (v) : "0" (v) : "cc");
1.1       root       34:     *a = v;
                     35: }
                     36: 
1.1.1.4   root       37: STATIC_INLINE void do_put_mem_word (uae_u16 *a, uae_u32 v)
1.1       root       38: {
                     39: #ifdef X86_PPRO_OPT
1.1.1.3   root       40:     __asm__ ("bswap %0" : "=&r" (v) : "0" (v << 16) : "cc");
1.1       root       41: #else
1.1.1.3   root       42:     __asm__ ("rolw $8,%w0" : "=r" (v) : "0" (v) : "cc");
1.1       root       43: #endif
                     44:     *a = v;
                     45: }
                     46: 
                     47: #define do_put_mem_byte(a,v) (*(uae_u8 *)(a) = (v))
                     48: 
                     49: #if 0
1.1.1.4   root       50: STATIC_INLINE uae_u32 call_mem_get_func(mem_get_func func, uae_cptr addr)
1.1       root       51: {
                     52:     uae_u32 result;
1.1.1.2   root       53:     __asm__("call %1"
1.1       root       54:            : "=a" (result) : "r" (func), "a" (addr) : "cc", "edx", "ecx");
                     55:     return result;
                     56: }
                     57: 
1.1.1.4   root       58: STATIC_INLINE void call_mem_put_func(mem_put_func func, uae_cptr addr, uae_u32 v)
1.1       root       59: {
1.1.1.2   root       60:     __asm__("call %2"
1.1       root       61:            : : "a" (addr), "d" (v), "r" (func) : "cc", "eax", "edx", "ecx", "memory");
                     62: }
                     63: #else
                     64: 
                     65: #define call_mem_get_func(func,addr) ((*func)(addr))
                     66: #define call_mem_put_func(func,addr,v) ((*func)(addr,v))
                     67: 
                     68: #endif
                     69: 
                     70: #undef NO_INLINE_MEMORY_ACCESS
                     71: #undef MD_HAVE_MEM_1_FUNCS
                     72: 
                     73: #ifdef MD_HAVE_MEM_1_FUNCS
1.1.1.4   root       74: STATIC_INLINE uae_u32 longget_1 (uae_cptr addr)
1.1       root       75: {
                     76:     uae_u32 result;
                     77: 
                     78:     __asm__ ("andl $0x00FFFFFF,%1\n"
                     79:             "\tcmpb $0,(%1,%3)\n"
                     80:             "\tleal 1f,%%ecx\n"
                     81:             "\tje longget_stub\n"
                     82:             "\taddl address_space,%1\n"
                     83:             "\tmovl (%1),%0\n"
1.1.1.3   root       84:             "\tbswap %0\n"
1.1       root       85:             "\t1:"
                     86:             : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc");
                     87:     return result;
                     88: }
1.1.1.4   root       89: STATIC_INLINE uae_u32 wordget_1 (uae_cptr addr)
1.1       root       90: {
                     91:     uae_u32 result;
                     92: 
                     93:     __asm__ ("andl $0x00FFFFFF,%1\n"
                     94:             "\tcmpb $0,(%1,%3)\n"
                     95:             "\tleal 1f,%%ecx\n"
                     96:             "\tje wordget_stub\n"
                     97:             "\taddl address_space,%1\n"
                     98:             "\tmovzwl (%1),%0\n"
                     99:             "\trolw $8,%w0\n"
                    100:             "\t1:"
                    101:             : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc");
                    102:     return result;
                    103: }
1.1.1.5 ! root      104: STATIC_INLINE uae_u32 byteget_1 (uae_cptr addr)
1.1       root      105: {
                    106:     uae_u32 result;
                    107: 
                    108:     __asm__ ("andl $0x00FFFFFF,%1\n"
                    109:             "\tcmpb $0,(%1,%3)\n"
                    110:             "\tleal 1f,%%ecx\n"
                    111:             "\tje byteget_stub\n"
                    112:             "\taddl address_space,%1\n"
                    113:             "\tmovzbl (%1),%0\n"
                    114:             "\t1:"
                    115:             : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc");
                    116:     return result;
                    117: }
1.1.1.4   root      118: STATIC_INLINE void longput_1 (uae_cptr addr, uae_u32 l)
1.1       root      119: {
                    120:     __asm__ __volatile__("andl $0x00FFFFFF,%0\n"
                    121:             "\tcmpb $0,(%0,%3)\n"
                    122:             "\tleal 1f,%%ecx\n"
                    123:             "\tje longput_stub\n"
                    124:             "\taddl address_space,%0\n"
1.1.1.3   root      125:             "\tbswap %1\n"
1.1       root      126:             "\tmovl %1,(%0)\n"
                    127:             "\t1:"
                    128:             : "=d" (addr), "=b" (l) : "0" (addr), "r" (good_address_map), "1" (l) : "cc", "memory", "ecx");
                    129: }
1.1.1.4   root      130: STATIC_INLINE void wordput_1 (uae_cptr addr, uae_u32 w)
1.1       root      131: {
                    132:     __asm__ __volatile__("andl $0x00FFFFFF,%0\n"
                    133:             "\tcmpb $0,(%0,%3)\n"
                    134:             "\tleal 1f,%%ecx\n"
                    135:             "\tje wordput_stub\n"
                    136:             "\taddl address_space,%0\n"
                    137:             "\trolw $8,%1\n"
                    138:             "\tmovw %w1,(%0)\n"
                    139:             "\t1:"
                    140:             : "=d" (addr), "=b" (w) : "0" (addr), "r" (good_address_map), "1" (w) : "cc", "memory", "ecx");
                    141: }
1.1.1.4   root      142: STATIC_INLINE void byteput_1 (uae_cptr addr, uae_u32 b)
1.1       root      143: {
                    144:     __asm__ __volatile__("andl $0x00FFFFFF,%0\n"
                    145:             "\tcmpb $0,(%0,%3)\n"
                    146:             "\tleal 1f,%%ecx\n"
                    147:             "\tje byteput_stub\n"
                    148:             "\taddl address_space,%0\n"
                    149:             "\tmovb %b1,(%0)\n"
                    150:             "\t1:"
                    151:             : "=d" (addr), "=b" (b) : "0" (addr), "r" (good_address_map), "1" (b) : "cc", "memory", "ecx");
                    152: }
                    153: 
                    154: #endif
                    155: 
                    156: #define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3)
                    157: 
                    158: /* Not the best place for this, but then there's no good place for a kludge
                    159:  * like this... */
                    160: #define HAVE_UAE_U24
                    161: typedef struct {
                    162:     unsigned char a, b, c;
                    163: } __attribute__ ((packed)) uae_u24;
                    164: 
1.1.1.4   root      165: STATIC_INLINE uae_u24 uae24_convert (uae_u32 v)
1.1       root      166: {
                    167:     return *(uae_u24 *)&v;
                    168: }

unix.superglobalmegacorp.com

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