tcg-target-has.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /* SPDX-License-Identifier: MIT */
  2. /*
  3. * Define target-specific opcode support
  4. * Copyright (c) 2009, 2011 Stefan Weil
  5. */
  6. //
  7. // Supported optional scalar instructions.
  8. //
  9. // Divs.
  10. #define TCG_TARGET_HAS_div_i32 1
  11. #define TCG_TARGET_HAS_rem_i32 1
  12. #define TCG_TARGET_HAS_div_i64 1
  13. #define TCG_TARGET_HAS_rem_i64 1
  14. // Extends.
  15. #define TCG_TARGET_HAS_ext8s_i32 1
  16. #define TCG_TARGET_HAS_ext16s_i32 1
  17. #define TCG_TARGET_HAS_ext8u_i32 1
  18. #define TCG_TARGET_HAS_ext16u_i32 1
  19. #define TCG_TARGET_HAS_ext8s_i64 1
  20. #define TCG_TARGET_HAS_ext16s_i64 1
  21. #define TCG_TARGET_HAS_ext32s_i64 1
  22. #define TCG_TARGET_HAS_ext8u_i64 1
  23. #define TCG_TARGET_HAS_ext16u_i64 1
  24. #define TCG_TARGET_HAS_ext32u_i64 1
  25. #define TCG_TARGET_HAS_extr_i64_i32 0
  26. // Register extractions.
  27. #define TCG_TARGET_HAS_extrl_i64_i32 1
  28. #define TCG_TARGET_HAS_extrh_i64_i32 1
  29. // Negations.
  30. #define TCG_TARGET_HAS_not_i32 1
  31. #define TCG_TARGET_HAS_not_i64 1
  32. // Logicals.
  33. #define TCG_TARGET_HAS_andc_i32 1
  34. #define TCG_TARGET_HAS_orc_i32 1
  35. #define TCG_TARGET_HAS_eqv_i32 1
  36. #define TCG_TARGET_HAS_rot_i32 1
  37. #define TCG_TARGET_HAS_negsetcond_i32 0
  38. #define TCG_TARGET_HAS_negsetcond_i64 0
  39. #define TCG_TARGET_HAS_nand_i32 1
  40. #define TCG_TARGET_HAS_nor_i32 1
  41. #define TCG_TARGET_HAS_andc_i64 1
  42. #define TCG_TARGET_HAS_eqv_i64 1
  43. #define TCG_TARGET_HAS_orc_i64 1
  44. #define TCG_TARGET_HAS_rot_i64 1
  45. #define TCG_TARGET_HAS_nor_i64 1
  46. #define TCG_TARGET_HAS_nand_i64 1
  47. // Bitwise operations.
  48. #define TCG_TARGET_HAS_clz_i32 1
  49. #define TCG_TARGET_HAS_ctz_i32 1
  50. #define TCG_TARGET_HAS_clz_i64 1
  51. #define TCG_TARGET_HAS_ctz_i64 1
  52. #define TCG_TARGET_HAS_tst 0
  53. // Swaps.
  54. #define TCG_TARGET_HAS_bswap16_i32 1
  55. #define TCG_TARGET_HAS_bswap32_i32 1
  56. #define TCG_TARGET_HAS_bswap16_i64 1
  57. #define TCG_TARGET_HAS_bswap32_i64 1
  58. #define TCG_TARGET_HAS_bswap64_i64 1
  59. //
  60. // Supported optional vector instructions.
  61. //
  62. #define TCG_TARGET_HAS_v64 1
  63. #define TCG_TARGET_HAS_v128 1
  64. #define TCG_TARGET_HAS_v256 0
  65. #define TCG_TARGET_HAS_andc_vec 1
  66. #define TCG_TARGET_HAS_orc_vec 1
  67. #define TCG_TARGET_HAS_nand_vec 0
  68. #define TCG_TARGET_HAS_nor_vec 0
  69. #define TCG_TARGET_HAS_eqv_vec 0
  70. #define TCG_TARGET_HAS_not_vec 1
  71. #define TCG_TARGET_HAS_neg_vec 1
  72. #define TCG_TARGET_HAS_abs_vec 1
  73. #define TCG_TARGET_HAS_roti_vec 0
  74. #define TCG_TARGET_HAS_rots_vec 0
  75. #define TCG_TARGET_HAS_rotv_vec 0
  76. #define TCG_TARGET_HAS_shi_vec 1
  77. #define TCG_TARGET_HAS_shs_vec 0
  78. #define TCG_TARGET_HAS_shv_vec 1
  79. #define TCG_TARGET_HAS_mul_vec 1
  80. #define TCG_TARGET_HAS_sat_vec 1
  81. #define TCG_TARGET_HAS_minmax_vec 1
  82. #define TCG_TARGET_HAS_bitsel_vec 1
  83. #define TCG_TARGET_HAS_cmpsel_vec 0
  84. #define TCG_TARGET_HAS_tst_vec 0
  85. //
  86. // Unsupported instructions.
  87. //
  88. // There's no direct instruction with which to count the number of ones,
  89. // so we'll leave this implemented as other instructions.
  90. #define TCG_TARGET_HAS_ctpop_i32 0
  91. #define TCG_TARGET_HAS_ctpop_i64 0
  92. // This operation exists specifically to allow us to provide differing register
  93. // constraints for 8-bit loads and stores. We don't need to do so, so we'll leave
  94. // this unimplemented, as we gain nothing by it.
  95. #define TCG_TARGET_HAS_qemu_st8_i32 0
  96. #define TCG_TARGET_HAS_qemu_ldst_i128 0
  97. // These should always be zero on our 64B platform.
  98. #define TCG_TARGET_HAS_muls2_i64 0
  99. #define TCG_TARGET_HAS_add2_i32 0
  100. #define TCG_TARGET_HAS_sub2_i32 0
  101. #define TCG_TARGET_HAS_mulu2_i32 0
  102. #define TCG_TARGET_HAS_add2_i64 0
  103. #define TCG_TARGET_HAS_sub2_i64 0
  104. #define TCG_TARGET_HAS_mulu2_i64 0
  105. #define TCG_TARGET_HAS_muluh_i64 0
  106. #define TCG_TARGET_HAS_mulsh_i64 0
  107. #define TCG_TARGET_HAS_extract2_i32 0
  108. #define TCG_TARGET_HAS_muls2_i32 0
  109. #define TCG_TARGET_HAS_muluh_i32 0
  110. #define TCG_TARGET_HAS_mulsh_i32 0
  111. #define TCG_TARGET_HAS_extract2_i64 0
  112. // We don't currently support gadgets with more than three arguments,
  113. // so we can't yet create movcond, deposit, or extract gadgets.
  114. #define TCG_TARGET_extract_valid(type, ofs, len) 0
  115. #define TCG_TARGET_sextract_valid(type, ofs, len) 0
  116. #define TCG_TARGET_deposit_valid(type, ofs, len) 0