Fix bindless path in d3d12 that i broke in earlier commit (did not affect any users, thats a debug thing)

Fix guest code profiler, it previously only worked with function precomp + all code you were about to execute already discovered
Allow AndNot if type is V128
This commit is contained in:
chss95cs@gmail.com 2022-10-16 07:48:43 -07:00
parent b41e5060da
commit d8b7b3ecec
3 changed files with 21 additions and 21 deletions

View File

@ -405,9 +405,10 @@ void X64Emitter::EmitProfilerEpilogue() {
if (cvars::instrument_call_times) { if (cvars::instrument_call_times) {
uint64_t* profiler_entry = uint64_t* profiler_entry =
backend()->GetProfilerRecordForFunction(current_guest_function_); backend()->GetProfilerRecordForFunction(current_guest_function_);
mov(ecx, 0x7ffe0014); mov(ecx, 0x7ffe0014);
mov(rdx, qword[rcx]); mov(rdx, qword[rcx]);
mov(rbx, (uintptr_t)profiler_entry); mov(r10, (uintptr_t)profiler_entry);
sub(rdx, qword[rsp + StackLayout::GUEST_PROFILER_START]); sub(rdx, qword[rsp + StackLayout::GUEST_PROFILER_START]);
// atomic add our time to the profiler entry // atomic add our time to the profiler entry
@ -416,7 +417,8 @@ void X64Emitter::EmitProfilerEpilogue() {
// this a few cycles less intrusive, but its good enough for now // this a few cycles less intrusive, but its good enough for now
// actually... lets just try without atomics lol // actually... lets just try without atomics lol
// lock(); // lock();
add(qword[rbx], rdx); add(qword[r10], rdx);
} }
#endif #endif
} }

View File

@ -1872,12 +1872,10 @@ Value* HIRBuilder::AndNot(Value* value1, Value* value2) {
ASSERT_NON_FLOAT_TYPE(value1); ASSERT_NON_FLOAT_TYPE(value1);
ASSERT_NON_FLOAT_TYPE(value2); ASSERT_NON_FLOAT_TYPE(value2);
ASSERT_TYPES_EQUAL(value1, value2); ASSERT_TYPES_EQUAL(value1, value2);
// e.andn(i.dest.reg().cvt64(), i.src2.reg().cvt64(), temp.cvt64()); //only other type it can be used with is INT64_TYPE (andc)
#if 1 if (value1->type != VEC128_TYPE) {
return this->And(this->Not(value2), value1); return this->And(this->Not(value2), value1);
} else {
#else
if (value1 == value2) { if (value1 == value2) {
return LoadZero(value1->type); return LoadZero(value1->type);
} else if (value1->IsConstantZero()) { } else if (value1->IsConstantZero()) {
@ -1891,7 +1889,7 @@ Value* HIRBuilder::AndNot(Value* value1, Value* value2) {
i->set_src2(value2); i->set_src2(value2);
i->src3.value = NULL; i->src3.value = NULL;
return i->dest; return i->dest;
#endif }
} }
Value* HIRBuilder::Or(Value* value1, Value* value2) { Value* HIRBuilder::Or(Value* value1, Value* value2) {

View File

@ -4877,7 +4877,7 @@ bool D3D12CommandProcessor::UpdateBindings_BindfulPath(
bool& retflag) { bool& retflag) {
retflag = true; retflag = true;
auto& provider = this->GetD3D12Provider(); auto& provider = this->GetD3D12Provider();
size_t texture_count_pixel = textures_pixel->size(); size_t texture_count_pixel = textures_pixel ? textures_pixel->size() : 0;
size_t texture_count_vertex = textures_vertex.size(); size_t texture_count_vertex = textures_vertex.size();
// //
// Bindful descriptors path. // Bindful descriptors path.