Annotation of uae/src/md-i386-gcc/memory.h, revision 1.1.1.2

1.1       root        1:  /* 
                      2:   * UAE - The Un*x Amiga Emulator
                      3:   * 
                      4:   * Memory access functions
                      5:   *
                      6:   * Copyright 1996 Bernd Schmidt
                      7:   */
                      8: 
1.1.1.2 ! root        9: static __inline__ uae_u32 do_get_mem_long(uae_u32 *a)
1.1       root       10: {
1.1.1.2 ! root       11:     uae_u32 retval;
1.1       root       12: 
                     13:     __asm__ ("bswapl %0" : "=r" (retval) : "0" (*a) : "cc");
                     14:     return retval;
                     15: }
                     16: 
1.1.1.2 ! root       17: static __inline__ uae_u32 do_get_mem_word(uae_u16 *a)
1.1       root       18: {
1.1.1.2 ! root       19:     uae_u32 retval;
1.1       root       20: 
1.1.1.2 ! root       21: #ifdef X86_PPRO_OPT
        !            22:     __asm__ ("movzwl %w1,%k0\n\tshll $16,%k0\n\tbswapl %k0\n" : "=&r" (retval) : "m" (*a) : "cc");
        !            23: #else
        !            24:     __asm__ ("xorl %k0,%k0\n\tmovw %w1,%w0\n\trolw $8,%w0" : "=&r" (retval) : "m" (*a) : "cc");
        !            25: #endif
1.1       root       26:     return retval;
                     27: }
                     28: 
1.1.1.2 ! root       29: #define do_get_mem_byte(a) ((uae_u32)*(a))
1.1       root       30: 
1.1.1.2 ! root       31: static __inline__ void do_put_mem_long(uae_u32 *a, uae_u32 v)
1.1       root       32: {
                     33:     __asm__ ("bswapl %0" : "=r" (v) : "0" (v) : "cc");
                     34:     *a = v;
                     35: }
                     36: 
1.1.1.2 ! root       37: static __inline__ void do_put_mem_word(uae_u16 *a, uae_u32 v)
1.1       root       38: {
1.1.1.2 ! root       39: #ifdef X86_PPRO_OPT
        !            40:     __asm__ ("bswapl %0" : "=&r" (v) : "0" (v << 16) : "cc");
        !            41: #else
1.1       root       42:     __asm__ ("rolw $8,%0" : "=r" (v) : "0" (v) : "cc");
1.1.1.2 ! root       43: #endif
1.1       root       44:     *a = v;
                     45: }
                     46: 
1.1.1.2 ! root       47: #define do_put_mem_byte(a,v) (*(a) = (v))
1.1       root       48: 
                     49: #if 0
1.1.1.2 ! root       50: static __inline__ uae_u32 call_mem_get_func(mem_get_func func, uae_cptr addr)
1.1       root       51: {
1.1.1.2 ! root       52:     uae_u32 result;
1.1       root       53:     __asm__("call *%1"
1.1.1.2 ! root       54:            : "=a" (result) : "r" (func), "a" (addr) : "cc", "edx", "ecx");
1.1       root       55:     return result;
                     56: }
                     57: 
1.1.1.2 ! 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
1.1.1.2 ! root       71: #undef MD_HAVE_MEM_1_FUNCS
        !            72: 
        !            73: #ifdef MD_HAVE_MEM_1_FUNCS
        !            74: static __inline__ uae_u32 longget_1(uae_cptr addr)
        !            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"
        !            84:             "\tbswapl %0\n"
        !            85:             "\t1:"
        !            86:             : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc");
        !            87:     return result;
        !            88: }
        !            89: static __inline__ uae_u32 wordget_1(uae_cptr addr)
        !            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: }
        !           104: static __inline__ uae_u32 byteget_1(uae_cptr addr) 
        !           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: }
        !           118: static __inline__ void longput_1(uae_cptr addr, uae_u32 l)
        !           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"
        !           125:             "\tbswapl %1\n"
        !           126:             "\tmovl %1,(%0)\n"
        !           127:             "\t1:"
        !           128:             : "=d" (addr), "=b" (l) : "0" (addr), "r" (good_address_map), "1" (l) : "cc", "memory", "ecx");
        !           129: }
        !           130: static __inline__ void wordput_1(uae_cptr addr, uae_u32 w)
        !           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: }
        !           142: static __inline__ void byteput_1(uae_cptr addr, uae_u32 b)
        !           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: 
        !           165: static __inline__ uae_u24 uae24_convert (uae_u32 v)
        !           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.