Merge branch 'memory'
This commit is contained in:
@@ -984,11 +984,24 @@ XEEMITTER(dcbtst, 0x7C0001EC, X)(PPCHIRBuilder& f, InstrData& i) {
|
||||
}
|
||||
|
||||
XEEMITTER(dcbz, 0x7C0007EC, X)(PPCHIRBuilder& f, InstrData& i) {
|
||||
// No-op for now.
|
||||
// TODO(benvanik): use prefetch
|
||||
// or dcbz128 0x7C2007EC
|
||||
// XEINSTRNOTIMPLEMENTED();
|
||||
f.Nop();
|
||||
// EA <- (RA) + (RB)
|
||||
// memset(EA & ~31, 0, 32)
|
||||
Value* ea = CalculateEA_0(f, i.X.RA, i.X.RB);
|
||||
int block_size;
|
||||
int address_mask;
|
||||
if (i.X.RT == 1) {
|
||||
// dcbz128 - 128 byte set
|
||||
block_size = 128;
|
||||
address_mask = ~127;
|
||||
}
|
||||
else {
|
||||
// dcbz - 32 byte set
|
||||
block_size = 32;
|
||||
address_mask = ~31;
|
||||
}
|
||||
f.Memset(f.And(ea, f.LoadConstant(int64_t(address_mask))),
|
||||
f.LoadZero(INT8_TYPE), f.LoadConstant(int64_t(block_size)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -197,9 +197,10 @@ class TestRunner {
|
||||
// Simulate a thread.
|
||||
uint32_t stack_size = 64 * 1024;
|
||||
uint32_t stack_address = START_ADDRESS - stack_size;
|
||||
uint32_t thread_state_address = stack_address - 0x1000;
|
||||
thread_state.reset(new ThreadState(processor.get(), 0x100, stack_address,
|
||||
stack_size, thread_state_address));
|
||||
uint32_t pcr_address = stack_address - 0x1000;
|
||||
thread_state.reset(new ThreadState(processor.get(), 0x100,
|
||||
ThreadStackType::kUserStack,
|
||||
stack_address, stack_size, pcr_address));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user