AInstEmitSimdHash.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using ChocolArm64.Decoder;
  2. using ChocolArm64.Translation;
  3. namespace ChocolArm64.Instruction
  4. {
  5. static partial class AInstEmit
  6. {
  7. #region "Sha256"
  8. public static void Sha256h_V(AILEmitterCtx Context)
  9. {
  10. AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
  11. Context.EmitLdvec(Op.Rd);
  12. Context.EmitLdvec(Op.Rn);
  13. Context.EmitLdvec(Op.Rm);
  14. ASoftFallback.EmitCall(Context, nameof(ASoftFallback.HashLower));
  15. Context.EmitStvec(Op.Rd);
  16. }
  17. public static void Sha256h2_V(AILEmitterCtx Context)
  18. {
  19. AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
  20. Context.EmitLdvec(Op.Rd);
  21. Context.EmitLdvec(Op.Rn);
  22. Context.EmitLdvec(Op.Rm);
  23. ASoftFallback.EmitCall(Context, nameof(ASoftFallback.HashUpper));
  24. Context.EmitStvec(Op.Rd);
  25. }
  26. public static void Sha256su0_V(AILEmitterCtx Context)
  27. {
  28. AOpCodeSimd Op = (AOpCodeSimd)Context.CurrOp;
  29. Context.EmitLdvec(Op.Rd);
  30. Context.EmitLdvec(Op.Rn);
  31. ASoftFallback.EmitCall(Context, nameof(ASoftFallback.SchedulePart1));
  32. Context.EmitStvec(Op.Rd);
  33. }
  34. public static void Sha256su1_V(AILEmitterCtx Context)
  35. {
  36. AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
  37. Context.EmitLdvec(Op.Rd);
  38. Context.EmitLdvec(Op.Rn);
  39. Context.EmitLdvec(Op.Rm);
  40. ASoftFallback.EmitCall(Context, nameof(ASoftFallback.SchedulePart2));
  41. Context.EmitStvec(Op.Rd);
  42. }
  43. #endregion
  44. }
  45. }