AInstEmitSimdLogical.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using ChocolArm64.Translation;
  2. using System;
  3. using System.Reflection.Emit;
  4. using static ChocolArm64.Instruction.AInstEmitSimdHelper;
  5. namespace ChocolArm64.Instruction
  6. {
  7. static partial class AInstEmit
  8. {
  9. public static void And_V(AILEmitterCtx Context)
  10. {
  11. EmitVectorBinaryOpZx(Context, () => Context.Emit(OpCodes.And));
  12. }
  13. public static void Bic_V(AILEmitterCtx Context)
  14. {
  15. EmitVectorBinaryOpZx(Context, () =>
  16. {
  17. Context.Emit(OpCodes.Not);
  18. Context.Emit(OpCodes.And);
  19. });
  20. }
  21. public static void Bic_Vi(AILEmitterCtx Context)
  22. {
  23. EmitVectorImmBinaryOp(Context, () =>
  24. {
  25. Context.Emit(OpCodes.Not);
  26. Context.Emit(OpCodes.And);
  27. });
  28. }
  29. public static void Bsl_V(AILEmitterCtx Context)
  30. {
  31. EmitVectorTernaryOpZx(Context, () =>
  32. {
  33. Context.EmitSttmp();
  34. Context.EmitLdtmp();
  35. Context.Emit(OpCodes.Xor);
  36. Context.Emit(OpCodes.And);
  37. Context.EmitLdtmp();
  38. Context.Emit(OpCodes.Xor);
  39. });
  40. }
  41. public static void Eor_V(AILEmitterCtx Context)
  42. {
  43. EmitVectorBinaryOpZx(Context, () => Context.Emit(OpCodes.Xor));
  44. }
  45. public static void Not_V(AILEmitterCtx Context)
  46. {
  47. EmitVectorUnaryOpZx(Context, () => Context.Emit(OpCodes.Not));
  48. }
  49. public static void Orr_V(AILEmitterCtx Context)
  50. {
  51. EmitVectorBinaryOpZx(Context, () => Context.Emit(OpCodes.Or));
  52. }
  53. public static void Orr_Vi(AILEmitterCtx Context)
  54. {
  55. EmitVectorImmBinaryOp(Context, () => Context.Emit(OpCodes.Or));
  56. }
  57. public static void Rev64_V(AILEmitterCtx Context)
  58. {
  59. Action Emit = () =>
  60. {
  61. ASoftFallback.EmitCall(Context, nameof(ASoftFallback.ReverseBits64));
  62. };
  63. EmitVectorUnaryOpZx(Context, Emit);
  64. }
  65. }
  66. }