@ -181,14 +181,6 @@ bool InterpreterVisitor::Ordered(size_t size, bool L, bool o0, Reg Rn, Reg Rt) {
const size_t dbytes = datasize / 8 ;
const size_t dbytes = datasize / 8 ;
u64 address = ( Rn = = Reg : : SP ) ? this - > GetSp ( ) : this - > GetReg ( Rn ) ;
u64 address = ( Rn = = Reg : : SP ) ? this - > GetSp ( ) : this - > GetReg ( Rn ) ;
// Conservative prefetch for atomic ops
if ( memop = = MemOp : : Load ) {
__builtin_prefetch ( reinterpret_cast < const void * > ( address ) , 0 , 1 ) ;
} else {
__builtin_prefetch ( reinterpret_cast < const void * > ( address ) , 1 , 1 ) ;
}
switch ( memop ) {
switch ( memop ) {
case MemOp : : Store : {
case MemOp : : Store : {
std : : atomic_thread_fence ( std : : memory_order_seq_cst ) ;
std : : atomic_thread_fence ( std : : memory_order_seq_cst ) ;
@ -435,21 +427,6 @@ bool InterpreterVisitor::RegisterImmediate(bool wback, bool postindex, size_t sc
if ( ! postindex )
if ( ! postindex )
address + = offset ;
address + = offset ;
// Optimized prefetch for loads
if ( memop = = MemOp : : Load ) {
const size_t access_size = datasize / 8 ;
const bool is_aligned = ( address % access_size ) = = 0 ;
if ( is_aligned ) {
__builtin_prefetch ( reinterpret_cast < const void * > ( address ) , 0 , 3 ) ;
if ( access_size > = 8 & & access_size < = 32 ) {
__builtin_prefetch ( reinterpret_cast < const void * > ( address + PREFETCH_STRIDE ) , 0 , 3 ) ;
}
} else {
__builtin_prefetch ( reinterpret_cast < const void * > ( address ) , 0 , 1 ) ;
}
}
switch ( memop ) {
switch ( memop ) {
case MemOp : : Store : {
case MemOp : : Store : {
u64 data = this - > GetReg ( Rt ) ;
u64 data = this - > GetReg ( Rt ) ;
@ -516,15 +493,6 @@ bool InterpreterVisitor::SIMDImmediate(bool wback, bool postindex, size_t scale,
if ( ! postindex )
if ( ! postindex )
address + = offset ;
address + = offset ;
// Aggressive prefetch for SIMD
if ( memop = = MemOp : : Load ) {
__builtin_prefetch ( reinterpret_cast < const void * > ( address ) , 0 , 3 ) ;
__builtin_prefetch ( reinterpret_cast < const void * > ( address + CACHE_LINE_SIZE ) , 0 , 3 ) ;
if ( datasize > = SIMD_PREFETCH_THRESHOLD ) {
__builtin_prefetch ( reinterpret_cast < const void * > ( address + PREFETCH_STRIDE ) , 0 , 3 ) ;
}
}
switch ( memop ) {
switch ( memop ) {
case MemOp : : Store : {
case MemOp : : Store : {
u128 data = VectorGetElement ( this - > GetVec ( Vt ) , datasize ) ;
u128 data = VectorGetElement ( this - > GetVec ( Vt ) , datasize ) ;