Diff for /qemu/softmmu_header.h between versions 1.1.1.5 and 1.1.1.6

version 1.1.1.5, 2018/04/24 16:50:37 version 1.1.1.6, 2018/04/24 17:20:45
Line 14 Line 14
  * Lesser General Public License for more details.   * Lesser General Public License for more details.
  *   *
  * You should have received a copy of the GNU Lesser General Public   * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software   * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA  
  */   */
 #if DATA_SIZE == 8  #if DATA_SIZE == 8
 #define SUFFIX q  #define SUFFIX q
Line 70 Line 69
 #define ADDR_READ addr_read  #define ADDR_READ addr_read
 #endif  #endif
   
 #if (DATA_SIZE <= 4) && (TARGET_LONG_BITS == 32) && defined(__i386__) && \  
     (ACCESS_TYPE < NB_MMU_MODES) && defined(ASM_SOFTMMU)  
   
 static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(target_ulong ptr)  
 {  
     int res;  
   
     asm volatile ("movl %1, %%edx\n"  
                   "movl %1, %%eax\n"  
                   "shrl %3, %%edx\n"  
                   "andl %4, %%eax\n"  
                   "andl %2, %%edx\n"  
                   "leal %5(%%edx, %%ebp), %%edx\n"  
                   "cmpl (%%edx), %%eax\n"  
                   "movl %1, %%eax\n"  
                   "je 1f\n"  
                   "movl %6, %%edx\n"  
                   "call %7\n"  
                   "movl %%eax, %0\n"  
                   "jmp 2f\n"  
                   "1:\n"  
                   "addl 12(%%edx), %%eax\n"  
 #if DATA_SIZE == 1  
                   "movzbl (%%eax), %0\n"  
 #elif DATA_SIZE == 2  
                   "movzwl (%%eax), %0\n"  
 #elif DATA_SIZE == 4  
                   "movl (%%eax), %0\n"  
 #else  
 #error unsupported size  
 #endif  
                   "2:\n"  
                   : "=r" (res)  
                   : "r" (ptr),  
                   "i" ((CPU_TLB_SIZE - 1) << CPU_TLB_ENTRY_BITS),  
                   "i" (TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS),  
                   "i" (TARGET_PAGE_MASK | (DATA_SIZE - 1)),  
                   "m" (*(uint32_t *)offsetof(CPUState, tlb_table[CPU_MMU_INDEX][0].addr_read)),  
                   "i" (CPU_MMU_INDEX),  
                   "m" (*(uint8_t *)&glue(glue(__ld, SUFFIX), MMUSUFFIX))  
                   : "%eax", "%ecx", "%edx", "memory", "cc");  
     return res;  
 }  
   
 #if DATA_SIZE <= 2  
 static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(target_ulong ptr)  
 {  
     int res;  
   
     asm volatile ("movl %1, %%edx\n"  
                   "movl %1, %%eax\n"  
                   "shrl %3, %%edx\n"  
                   "andl %4, %%eax\n"  
                   "andl %2, %%edx\n"  
                   "leal %5(%%edx, %%ebp), %%edx\n"  
                   "cmpl (%%edx), %%eax\n"  
                   "movl %1, %%eax\n"  
                   "je 1f\n"  
                   "movl %6, %%edx\n"  
                   "call %7\n"  
 #if DATA_SIZE == 1  
                   "movsbl %%al, %0\n"  
 #elif DATA_SIZE == 2  
                   "movswl %%ax, %0\n"  
 #else  
 #error unsupported size  
 #endif  
                   "jmp 2f\n"  
                   "1:\n"  
                   "addl 12(%%edx), %%eax\n"  
 #if DATA_SIZE == 1  
                   "movsbl (%%eax), %0\n"  
 #elif DATA_SIZE == 2  
                   "movswl (%%eax), %0\n"  
 #else  
 #error unsupported size  
 #endif  
                   "2:\n"  
                   : "=r" (res)  
                   : "r" (ptr),  
                   "i" ((CPU_TLB_SIZE - 1) << CPU_TLB_ENTRY_BITS),  
                   "i" (TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS),  
                   "i" (TARGET_PAGE_MASK | (DATA_SIZE - 1)),  
                   "m" (*(uint32_t *)offsetof(CPUState, tlb_table[CPU_MMU_INDEX][0].addr_read)),  
                   "i" (CPU_MMU_INDEX),  
                   "m" (*(uint8_t *)&glue(glue(__ld, SUFFIX), MMUSUFFIX))  
                   : "%eax", "%ecx", "%edx", "memory", "cc");  
     return res;  
 }  
 #endif  
   
 static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(target_ulong ptr, RES_TYPE v)  
 {  
     asm volatile ("movl %0, %%edx\n"  
                   "movl %0, %%eax\n"  
                   "shrl %3, %%edx\n"  
                   "andl %4, %%eax\n"  
                   "andl %2, %%edx\n"  
                   "leal %5(%%edx, %%ebp), %%edx\n"  
                   "cmpl (%%edx), %%eax\n"  
                   "movl %0, %%eax\n"  
                   "je 1f\n"  
 #if DATA_SIZE == 1  
                   "movzbl %b1, %%edx\n"  
 #elif DATA_SIZE == 2  
                   "movzwl %w1, %%edx\n"  
 #elif DATA_SIZE == 4  
                   "movl %1, %%edx\n"  
 #else  
 #error unsupported size  
 #endif  
                   "movl %6, %%ecx\n"  
                   "call %7\n"  
                   "jmp 2f\n"  
                   "1:\n"  
                   "addl 8(%%edx), %%eax\n"  
 #if DATA_SIZE == 1  
                   "movb %b1, (%%eax)\n"  
 #elif DATA_SIZE == 2  
                   "movw %w1, (%%eax)\n"  
 #elif DATA_SIZE == 4  
                   "movl %1, (%%eax)\n"  
 #else  
 #error unsupported size  
 #endif  
                   "2:\n"  
                   :  
                   : "r" (ptr),  
 #if DATA_SIZE == 1  
                   "q" (v),  
 #else  
                   "r" (v),  
 #endif  
                   "i" ((CPU_TLB_SIZE - 1) << CPU_TLB_ENTRY_BITS),  
                   "i" (TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS),  
                   "i" (TARGET_PAGE_MASK | (DATA_SIZE - 1)),  
                   "m" (*(uint32_t *)offsetof(CPUState, tlb_table[CPU_MMU_INDEX][0].addr_write)),  
                   "i" (CPU_MMU_INDEX),  
                   "m" (*(uint8_t *)&glue(glue(__st, SUFFIX), MMUSUFFIX))  
                   : "%eax", "%ecx", "%edx", "memory", "cc");  
 }  
   
 #else  
   
 /* generic load/store macros */  /* generic load/store macros */
   
 static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(target_ulong ptr)  static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(target_ulong ptr)
Line 284  static inline void glue(glue(st, SUFFIX) Line 139  static inline void glue(glue(st, SUFFIX)
   
 #endif /* ACCESS_TYPE != (NB_MMU_MODES + 1) */  #endif /* ACCESS_TYPE != (NB_MMU_MODES + 1) */
   
 #endif /* !asm */  
   
 #if ACCESS_TYPE != (NB_MMU_MODES + 1)  #if ACCESS_TYPE != (NB_MMU_MODES + 1)
   
 #if DATA_SIZE == 8  #if DATA_SIZE == 8

Removed from v.1.1.1.5  
changed lines
  Added in v.1.1.1.6


unix.superglobalmegacorp.com