Browse Source

[hle/kernel] mark invalid SVC paths as unreachable (#3023)

Should improve performance of SVC by a very, very tiny margin. Codegen seems to be better from the exclusion of all domains beyond >=0x92

Signed-off-by: lizzie lizzie@eden-emu.dev

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3023
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
vk-fix-oom-force-maller-buffers
lizzie 3 weeks ago
committed by crueter
parent
commit
09f03f5640
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 8
      src/core/hle/kernel/svc.cpp
  2. 5
      tools/svc_generator.py

8
src/core/hle/kernel/svc.cpp

@ -2364,9 +2364,7 @@ static void Call32(Core::System& system, u32 imm, std::span<uint64_t, 8> args) {
case SvcId::CallSecureMonitor: return SvcWrap_CallSecureMonitor64From32(system, args);
case SvcId::MapInsecureMemory: return SvcWrap_MapInsecureMemory64From32(system, args);
case SvcId::UnmapInsecureMemory: return SvcWrap_UnmapInsecureMemory64From32(system, args);
default:
LOG_CRITICAL(Kernel_SVC, "Unknown SVC {:x}!", imm);
break;
default: UNREACHABLE_MSG("Unhandled SVC {:#x}!", imm);
}
}
@ -2495,9 +2493,7 @@ static void Call64(Core::System& system, u32 imm, std::span<uint64_t, 8> args) {
case SvcId::CallSecureMonitor: return SvcWrap_CallSecureMonitor64(system, args);
case SvcId::MapInsecureMemory: return SvcWrap_MapInsecureMemory64(system, args);
case SvcId::UnmapInsecureMemory: return SvcWrap_UnmapInsecureMemory64(system, args);
default:
LOG_CRITICAL(Kernel_SVC, "Unknown SVC {:x}!", imm);
break;
default: UNREACHABLE_MSG("Unhandled SVC {:#x}!", imm);
}
}
void Call(Core::System& system, u32 imm) {

5
tools/svc_generator.py

@ -597,10 +597,7 @@ def emit_call(bitness, names, suffix):
for _, name in names:
lines.append(f"{indent}case SvcId::{name}: return SvcWrap_{name}{suffix}(system, args);")
lines.append(f"{indent}default:")
lines.append(
f"{indent*2}LOG_CRITICAL(Kernel_SVC, \"Unknown SVC {{:x}}!\", imm);")
lines.append(f"{indent*2}break;")
lines.append(f"{indent}default: UNREACHABLE_MSG(\"Unhandled SVC {{:#x}}\", imm);")
lines.append(f"{indent}}}")
lines.append("}")

Loading…
Cancel
Save