diff options
| author | 2021-05-08 18:50:10 -0400 | |
|---|---|---|
| committer | 2021-07-22 21:51:30 -0400 | |
| commit | 941c6dc740ed368edbbc00913ace73dddecd43ba (patch) | |
| tree | 8747fc4328791cf32e793d85dc5eaca9d9cded0a /src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | |
| parent | glasm: Use BitField instead of C bitfields (diff) | |
| download | yuzu-941c6dc740ed368edbbc00913ace73dddecd43ba.tar.gz yuzu-941c6dc740ed368edbbc00913ace73dddecd43ba.tar.xz yuzu-941c6dc740ed368edbbc00913ace73dddecd43ba.zip | |
glasm: Implement BFI, BFE
Along with implementations of common instructions along the way
Diffstat (limited to 'src/shader_recompiler/backend/glasm/emit_glasm_instructions.h')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h index 30cc6c2eb..13f47b253 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h +++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | |||
| @@ -208,8 +208,8 @@ void EmitSelectU8(EmitContext& ctx, std::string_view cond, std::string_view true | |||
| 208 | std::string_view false_value); | 208 | std::string_view false_value); |
| 209 | void EmitSelectU16(EmitContext& ctx, std::string_view cond, std::string_view true_value, | 209 | void EmitSelectU16(EmitContext& ctx, std::string_view cond, std::string_view true_value, |
| 210 | std::string_view false_value); | 210 | std::string_view false_value); |
| 211 | void EmitSelectU32(EmitContext& ctx, std::string_view cond, std::string_view true_value, | 211 | void EmitSelectU32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, |
| 212 | std::string_view false_value); | 212 | std::string_view true_value, std::string_view false_value); |
| 213 | void EmitSelectU64(EmitContext& ctx, std::string_view cond, std::string_view true_value, | 213 | void EmitSelectU64(EmitContext& ctx, std::string_view cond, std::string_view true_value, |
| 214 | std::string_view false_value); | 214 | std::string_view false_value); |
| 215 | void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value, | 215 | void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value, |
| @@ -332,14 +332,14 @@ void EmitFPIsNan16(EmitContext& ctx, std::string_view value); | |||
| 332 | void EmitFPIsNan32(EmitContext& ctx, std::string_view value); | 332 | void EmitFPIsNan32(EmitContext& ctx, std::string_view value); |
| 333 | void EmitFPIsNan64(EmitContext& ctx, std::string_view value); | 333 | void EmitFPIsNan64(EmitContext& ctx, std::string_view value); |
| 334 | void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | 334 | void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 335 | void EmitIAdd64(EmitContext& ctx, std::string_view a, std::string_view b); | 335 | void EmitIAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 336 | void EmitISub32(EmitContext& ctx, std::string_view a, std::string_view b); | 336 | void EmitISub32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 337 | void EmitISub64(EmitContext& ctx, std::string_view a, std::string_view b); | 337 | void EmitISub64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 338 | void EmitIMul32(EmitContext& ctx, std::string_view a, std::string_view b); | 338 | void EmitIMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 339 | void EmitINeg32(EmitContext& ctx, std::string_view value); | 339 | void EmitINeg32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 340 | void EmitINeg64(EmitContext& ctx, std::string_view value); | 340 | void EmitINeg64(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 341 | void EmitIAbs32(EmitContext& ctx, std::string_view value); | 341 | void EmitIAbs32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 342 | void EmitIAbs64(EmitContext& ctx, std::string_view value); | 342 | void EmitIAbs64(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 343 | void EmitShiftLeftLogical32(EmitContext& ctx, std::string_view base, std::string_view shift); | 343 | void EmitShiftLeftLogical32(EmitContext& ctx, std::string_view base, std::string_view shift); |
| 344 | void EmitShiftLeftLogical64(EmitContext& ctx, std::string_view base, std::string_view shift); | 344 | void EmitShiftLeftLogical64(EmitContext& ctx, std::string_view base, std::string_view shift); |
| 345 | void EmitShiftRightLogical32(EmitContext& ctx, std::string_view base, std::string_view shift); | 345 | void EmitShiftRightLogical32(EmitContext& ctx, std::string_view base, std::string_view shift); |
| @@ -349,35 +349,39 @@ void EmitShiftRightArithmetic64(EmitContext& ctx, std::string_view base, std::st | |||
| 349 | void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | 349 | void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 350 | void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | 350 | void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 351 | void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | 351 | void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 352 | void EmitBitFieldInsert(EmitContext& ctx, std::string_view base, std::string_view insert, | 352 | void EmitBitFieldInsert(EmitContext& ctx, IR::Inst& inst, std::string_view base, |
| 353 | std::string_view offset, std::string_view count); | 353 | std::string_view insert, std::string_view offset, std::string_view count); |
| 354 | void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base, | 354 | void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base, |
| 355 | std::string_view offset, std::string_view count); | 355 | std::string_view offset, std::string_view count); |
| 356 | void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base, | 356 | void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base, |
| 357 | std::string_view offset, std::string_view count); | 357 | std::string_view offset, std::string_view count); |
| 358 | void EmitBitReverse32(EmitContext& ctx, std::string_view value); | 358 | void EmitBitReverse32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 359 | void EmitBitCount32(EmitContext& ctx, std::string_view value); | 359 | void EmitBitCount32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 360 | void EmitBitwiseNot32(EmitContext& ctx, std::string_view value); | 360 | void EmitBitwiseNot32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 361 | void EmitFindSMsb32(EmitContext& ctx, std::string_view value); | 361 | void EmitFindSMsb32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 362 | void EmitFindUMsb32(EmitContext& ctx, std::string_view value); | 362 | void EmitFindUMsb32(EmitContext& ctx, IR::Inst& inst, std::string_view value); |
| 363 | void EmitSMin32(EmitContext& ctx, std::string_view a, std::string_view b); | 363 | void EmitSMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 364 | void EmitUMin32(EmitContext& ctx, std::string_view a, std::string_view b); | 364 | void EmitUMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 365 | void EmitSMax32(EmitContext& ctx, std::string_view a, std::string_view b); | 365 | void EmitSMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 366 | void EmitUMax32(EmitContext& ctx, std::string_view a, std::string_view b); | 366 | void EmitUMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); |
| 367 | void EmitSClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min, | 367 | void EmitSClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min, |
| 368 | std::string_view max); | 368 | std::string_view max); |
| 369 | void EmitUClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min, | 369 | void EmitUClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min, |
| 370 | std::string_view max); | 370 | std::string_view max); |
| 371 | void EmitSLessThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 371 | void EmitSLessThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); |
| 372 | void EmitULessThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 372 | void EmitULessThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); |
| 373 | void EmitIEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 373 | void EmitIEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); |
| 374 | void EmitSLessThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 374 | void EmitSLessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, |
| 375 | void EmitULessThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 375 | std::string_view rhs); |
| 376 | void EmitSGreaterThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 376 | void EmitULessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, |
| 377 | void EmitUGreaterThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 377 | std::string_view rhs); |
| 378 | void EmitINotEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 378 | void EmitSGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); |
| 379 | void EmitSGreaterThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 379 | void EmitUGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); |
| 380 | void EmitUGreaterThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | 380 | void EmitINotEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); |
| 381 | void EmitSGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||
| 382 | std::string_view rhs); | ||
| 383 | void EmitUGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||
| 384 | std::string_view rhs); | ||
| 381 | void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset, | 385 | void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset, |
| 382 | std::string_view value); | 386 | std::string_view value); |
| 383 | void EmitSharedAtomicSMin32(EmitContext& ctx, std::string_view pointer_offset, | 387 | void EmitSharedAtomicSMin32(EmitContext& ctx, std::string_view pointer_offset, |