LLVM: lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

24

25using namespace llvm;

26

27namespace {

28

29enum RuntimeLibcallSignature {

30 func,

31 f32_func_f32,

32 f32_func_f64,

33 f32_func_i32,

34 f32_func_i64,

35 f32_func_i16,

36 f64_func_f32,

37 f64_func_f64,

38 f64_func_i32,

39 f64_func_i64,

40 i32_func_f32,

41 i32_func_f64,

42 i32_func_i32,

43 i64_func_f32,

44 i64_func_f64,

45 i64_func_i64,

46 f32_func_f32_f32,

47 f32_func_f32_i32,

48 f32_func_f32_iPTR,

49 f32_func_i64_i64,

50 f64_func_f64_f64,

51 f64_func_f64_i32,

52 f64_func_f64_iPTR,

53 f64_func_i64_i64,

54 i16_func_f32,

55 i16_func_f64,

56 i16_func_i64_i64,

57 i8_func_i8_i8,

58 func_f32_iPTR_iPTR,

59 func_f64_iPTR_iPTR,

60 i16_func_i16_i16,

61 i32_func_f32_f32,

62 i32_func_f64_f64,

63 i32_func_i32_i32,

64 i32_func_i32_i32_iPTR,

65 i64_func_i64_i64,

66 i64_func_i64_i64_iPTR,

67 i64_i64_func_i32,

68 i64_i64_func_i64,

69 i64_i64_func_f32,

70 i64_i64_func_f64,

71 i16_i16_func_i16_i16,

72 i32_i32_func_i32_i32,

73 i64_i64_func_i64_i64,

74 i64_i64_func_i64_i64_iPTR,

75 i64_i64_func_i64_i64_i64_i64,

76 i64_i64_func_i64_i64_i64_i64_iPTR,

77 i64_i64_i64_i64_func_i64_i64_i64_i64,

78 i64_i64_func_i64_i64_i32,

79 i64_i64_func_i64_i64_i64_i64_i64_i64,

80 iPTR_func_i32,

81 iPTR_func_iPTR_i32_iPTR,

82 iPTR_func_iPTR_iPTR_iPTR,

83 f32_func_f32_f32_f32,

84 f64_func_f64_f64_f64,

85 func_i64_i64_iPTR_iPTR,

86 i32_func_i64_i64,

87 i32_func_i64_i64_i64_i64,

88 iPTR_func_f32,

89 iPTR_func_f64,

90 iPTR_func_i64_i64,

92};

93

94struct RuntimeLibcallSignatureTable {

95 std::vector Table;

96

97

98 RuntimeLibcallSignatureTable() : Table(RTLIB::UNKNOWN_LIBCALL, unsupported) {

99

100 Table[RTLIB::SHL_I16] = i16_func_i16_i16;

101 Table[RTLIB::SHL_I32] = i32_func_i32_i32;

102 Table[RTLIB::SHL_I64] = i64_func_i64_i64;

103 Table[RTLIB::SHL_I128] = i64_i64_func_i64_i64_i32;

104 Table[RTLIB::SRL_I16] = i16_func_i16_i16;

105 Table[RTLIB::SRL_I32] = i32_func_i32_i32;

106 Table[RTLIB::SRL_I64] = i64_func_i64_i64;

107 Table[RTLIB::SRL_I128] = i64_i64_func_i64_i64_i32;

108 Table[RTLIB::SRA_I16] = i16_func_i16_i16;

109 Table[RTLIB::SRA_I32] = i32_func_i32_i32;

110 Table[RTLIB::SRA_I64] = i64_func_i64_i64;

111 Table[RTLIB::SRA_I128] = i64_i64_func_i64_i64_i32;

112 Table[RTLIB::MUL_I8] = i8_func_i8_i8;

113 Table[RTLIB::MUL_I16] = i16_func_i16_i16;

114 Table[RTLIB::MUL_I32] = i32_func_i32_i32;

115 Table[RTLIB::MUL_I64] = i64_func_i64_i64;

116 Table[RTLIB::MUL_I128] = i64_i64_func_i64_i64_i64_i64;

117 Table[RTLIB::MULO_I32] = i32_func_i32_i32_iPTR;

118 Table[RTLIB::MULO_I64] = i64_func_i64_i64_iPTR;

119 Table[RTLIB::MULO_I128] = i64_i64_func_i64_i64_i64_i64_iPTR;

120 Table[RTLIB::SDIV_I8] = i8_func_i8_i8;

121 Table[RTLIB::SDIV_I16] = i16_func_i16_i16;

122 Table[RTLIB::SDIV_I32] = i32_func_i32_i32;

123 Table[RTLIB::SDIV_I64] = i64_func_i64_i64;

124 Table[RTLIB::SDIV_I128] = i64_i64_func_i64_i64_i64_i64;

125 Table[RTLIB::UDIV_I8] = i8_func_i8_i8;

126 Table[RTLIB::UDIV_I16] = i16_func_i16_i16;

127 Table[RTLIB::UDIV_I32] = i32_func_i32_i32;

128 Table[RTLIB::UDIV_I64] = i64_func_i64_i64;

129 Table[RTLIB::UDIV_I128] = i64_i64_func_i64_i64_i64_i64;

130 Table[RTLIB::SREM_I8] = i8_func_i8_i8;

131 Table[RTLIB::SREM_I16] = i16_func_i16_i16;

132 Table[RTLIB::SREM_I32] = i32_func_i32_i32;

133 Table[RTLIB::SREM_I64] = i64_func_i64_i64;

134 Table[RTLIB::SREM_I128] = i64_i64_func_i64_i64_i64_i64;

135 Table[RTLIB::UREM_I8] = i8_func_i8_i8;

136 Table[RTLIB::UREM_I16] = i16_func_i16_i16;

137 Table[RTLIB::UREM_I32] = i32_func_i32_i32;

138 Table[RTLIB::UREM_I64] = i64_func_i64_i64;

139 Table[RTLIB::UREM_I128] = i64_i64_func_i64_i64_i64_i64;

140 Table[RTLIB::SDIVREM_I8] = i8_func_i8_i8;

141 Table[RTLIB::SDIVREM_I16] = i16_i16_func_i16_i16;

142 Table[RTLIB::SDIVREM_I32] = i32_i32_func_i32_i32;

143 Table[RTLIB::SDIVREM_I64] = i64_func_i64_i64;

144 Table[RTLIB::SDIVREM_I128] = i64_i64_i64_i64_func_i64_i64_i64_i64;

145 Table[RTLIB::UDIVREM_I8] = i8_func_i8_i8;

146 Table[RTLIB::UDIVREM_I16] = i16_i16_func_i16_i16;

147 Table[RTLIB::UDIVREM_I32] = i32_i32_func_i32_i32;

148 Table[RTLIB::UDIVREM_I64] = i64_i64_func_i64_i64;

149 Table[RTLIB::UDIVREM_I128] = i64_i64_i64_i64_func_i64_i64_i64_i64;

150 Table[RTLIB::NEG_I32] = i32_func_i32;

151 Table[RTLIB::NEG_I64] = i64_func_i64;

152

153

154

155 Table[RTLIB::ADD_F32] = f32_func_f32_f32;

156 Table[RTLIB::ADD_F64] = f64_func_f64_f64;

157 Table[RTLIB::ADD_F128] = i64_i64_func_i64_i64_i64_i64;

158 Table[RTLIB::SUB_F32] = f32_func_f32_f32;

159 Table[RTLIB::SUB_F64] = f64_func_f64_f64;

160 Table[RTLIB::SUB_F128] = i64_i64_func_i64_i64_i64_i64;

161 Table[RTLIB::MUL_F32] = f32_func_f32_f32;

162 Table[RTLIB::MUL_F64] = f64_func_f64_f64;

163 Table[RTLIB::MUL_F128] = i64_i64_func_i64_i64_i64_i64;

164 Table[RTLIB::DIV_F32] = f32_func_f32_f32;

165 Table[RTLIB::DIV_F64] = f64_func_f64_f64;

166 Table[RTLIB::DIV_F128] = i64_i64_func_i64_i64_i64_i64;

167 Table[RTLIB::REM_F32] = f32_func_f32_f32;

168 Table[RTLIB::REM_F64] = f64_func_f64_f64;

169 Table[RTLIB::REM_F128] = i64_i64_func_i64_i64_i64_i64;

170 Table[RTLIB::FMA_F32] = f32_func_f32_f32_f32;

171 Table[RTLIB::FMA_F64] = f64_func_f64_f64_f64;

172 Table[RTLIB::FMA_F128] = i64_i64_func_i64_i64_i64_i64_i64_i64;

173 Table[RTLIB::POWI_F32] = f32_func_f32_i32;

174 Table[RTLIB::POWI_F64] = f64_func_f64_i32;

175 Table[RTLIB::POWI_F128] = i64_i64_func_i64_i64_i32;

176 Table[RTLIB::SQRT_F32] = f32_func_f32;

177 Table[RTLIB::SQRT_F64] = f64_func_f64;

178 Table[RTLIB::SQRT_F128] = i64_i64_func_i64_i64;

179 Table[RTLIB::CBRT_F32] = f32_func_f32;

180 Table[RTLIB::CBRT_F64] = f64_func_f64;

181 Table[RTLIB::CBRT_F128] = i64_i64_func_i64_i64;

182 Table[RTLIB::LOG_F32] = f32_func_f32;

183 Table[RTLIB::LOG_F64] = f64_func_f64;

184 Table[RTLIB::LOG_F128] = i64_i64_func_i64_i64;

185 Table[RTLIB::LOG2_F32] = f32_func_f32;

186 Table[RTLIB::LOG2_F64] = f64_func_f64;

187 Table[RTLIB::LOG2_F128] = i64_i64_func_i64_i64;

188 Table[RTLIB::LOG10_F32] = f32_func_f32;

189 Table[RTLIB::LOG10_F64] = f64_func_f64;

190 Table[RTLIB::LOG10_F128] = i64_i64_func_i64_i64;

191 Table[RTLIB::EXP_F32] = f32_func_f32;

192 Table[RTLIB::EXP_F64] = f64_func_f64;

193 Table[RTLIB::EXP_F128] = i64_i64_func_i64_i64;

194 Table[RTLIB::EXP2_F32] = f32_func_f32;

195 Table[RTLIB::EXP2_F64] = f64_func_f64;

196 Table[RTLIB::EXP2_F128] = i64_i64_func_i64_i64;

197 Table[RTLIB::EXP10_F32] = f32_func_f32;

198 Table[RTLIB::EXP10_F64] = f64_func_f64;

199 Table[RTLIB::EXP10_F128] = i64_i64_func_i64_i64;

200 Table[RTLIB::SIN_F32] = f32_func_f32;

201 Table[RTLIB::SIN_F64] = f64_func_f64;

202 Table[RTLIB::SIN_F128] = i64_i64_func_i64_i64;

203 Table[RTLIB::COS_F32] = f32_func_f32;

204 Table[RTLIB::COS_F64] = f64_func_f64;

205 Table[RTLIB::COS_F128] = i64_i64_func_i64_i64;

206 Table[RTLIB::TAN_F32] = f32_func_f32;

207 Table[RTLIB::TAN_F64] = f64_func_f64;

208 Table[RTLIB::TAN_F128] = i64_i64_func_i64_i64;

209 Table[RTLIB::ASIN_F32] = f32_func_f32;

210 Table[RTLIB::ASIN_F64] = f64_func_f64;

211 Table[RTLIB::ASIN_F128] = i64_i64_func_i64_i64;

212 Table[RTLIB::ACOS_F32] = f32_func_f32;

213 Table[RTLIB::ACOS_F64] = f64_func_f64;

214 Table[RTLIB::ACOS_F128] = i64_i64_func_i64_i64;

215 Table[RTLIB::ATAN_F32] = f32_func_f32;

216 Table[RTLIB::ATAN_F64] = f64_func_f64;

217 Table[RTLIB::ATAN_F128] = i64_i64_func_i64_i64;

218 Table[RTLIB::ATAN2_F32] = f32_func_f32_f32;

219 Table[RTLIB::ATAN2_F64] = f64_func_f64_f64;

220 Table[RTLIB::ATAN2_F128] = i64_i64_func_i64_i64_i64_i64;

221 Table[RTLIB::SINH_F32] = f32_func_f32;

222 Table[RTLIB::SINH_F64] = f64_func_f64;

223 Table[RTLIB::SINH_F128] = i64_i64_func_i64_i64;

224 Table[RTLIB::COSH_F32] = f32_func_f32;

225 Table[RTLIB::COSH_F64] = f64_func_f64;

226 Table[RTLIB::COSH_F128] = i64_i64_func_i64_i64;

227 Table[RTLIB::TANH_F32] = f32_func_f32;

228 Table[RTLIB::TANH_F64] = f64_func_f64;

229 Table[RTLIB::TANH_F128] = i64_i64_func_i64_i64;

230 Table[RTLIB::SINCOS_F32] = func_f32_iPTR_iPTR;

231 Table[RTLIB::SINCOS_F64] = func_f64_iPTR_iPTR;

232 Table[RTLIB::SINCOS_F128] = func_i64_i64_iPTR_iPTR;

233 Table[RTLIB::POW_F32] = f32_func_f32_f32;

234 Table[RTLIB::POW_F64] = f64_func_f64_f64;

235 Table[RTLIB::POW_F128] = i64_i64_func_i64_i64_i64_i64;

236 Table[RTLIB::CEIL_F32] = f32_func_f32;

237 Table[RTLIB::CEIL_F64] = f64_func_f64;

238 Table[RTLIB::CEIL_F128] = i64_i64_func_i64_i64;

239 Table[RTLIB::TRUNC_F32] = f32_func_f32;

240 Table[RTLIB::TRUNC_F64] = f64_func_f64;

241 Table[RTLIB::TRUNC_F128] = i64_i64_func_i64_i64;

242 Table[RTLIB::RINT_F32] = f32_func_f32;

243 Table[RTLIB::RINT_F64] = f64_func_f64;

244 Table[RTLIB::RINT_F128] = i64_i64_func_i64_i64;

245 Table[RTLIB::NEARBYINT_F32] = f32_func_f32;

246 Table[RTLIB::NEARBYINT_F64] = f64_func_f64;

247 Table[RTLIB::NEARBYINT_F128] = i64_i64_func_i64_i64;

248 Table[RTLIB::ROUND_F32] = f32_func_f32;

249 Table[RTLIB::ROUND_F64] = f64_func_f64;

250 Table[RTLIB::ROUND_F128] = i64_i64_func_i64_i64;

251 Table[RTLIB::ROUNDEVEN_F32] = f32_func_f32;

252 Table[RTLIB::ROUNDEVEN_F64] = f64_func_f64;

253 Table[RTLIB::ROUNDEVEN_F128] = i64_i64_func_i64_i64;

254 Table[RTLIB::LROUND_F32] = iPTR_func_f32;

255 Table[RTLIB::LROUND_F64] = iPTR_func_f64;

256 Table[RTLIB::LROUND_F128] = iPTR_func_i64_i64;

257 Table[RTLIB::LLROUND_F32] = i64_func_f32;

258 Table[RTLIB::LLROUND_F64] = i64_func_f64;

259 Table[RTLIB::LLROUND_F128] = i64_func_i64_i64;

260 Table[RTLIB::LRINT_F32] = iPTR_func_f32;

261 Table[RTLIB::LRINT_F64] = iPTR_func_f64;

262 Table[RTLIB::LRINT_F128] = iPTR_func_i64_i64;

263 Table[RTLIB::LLRINT_F32] = i64_func_f32;

264 Table[RTLIB::LLRINT_F64] = i64_func_f64;

265 Table[RTLIB::LLRINT_F128] = i64_func_i64_i64;

266 Table[RTLIB::FLOOR_F32] = f32_func_f32;

267 Table[RTLIB::FLOOR_F64] = f64_func_f64;

268 Table[RTLIB::FLOOR_F128] = i64_i64_func_i64_i64;

269 Table[RTLIB::COPYSIGN_F32] = f32_func_f32_f32;

270 Table[RTLIB::COPYSIGN_F64] = f64_func_f64_f64;

271 Table[RTLIB::COPYSIGN_F128] = i64_i64_func_i64_i64_i64_i64;

272 Table[RTLIB::FMIN_F32] = f32_func_f32_f32;

273 Table[RTLIB::FMIN_F64] = f64_func_f64_f64;

274 Table[RTLIB::FMIN_F128] = i64_i64_func_i64_i64_i64_i64;

275 Table[RTLIB::FMAX_F32] = f32_func_f32_f32;

276 Table[RTLIB::FMAX_F64] = f64_func_f64_f64;

277 Table[RTLIB::FMAX_F128] = i64_i64_func_i64_i64_i64_i64;

278 Table[RTLIB::LDEXP_F32] = f32_func_f32_i32;

279 Table[RTLIB::LDEXP_F64] = f64_func_f64_i32;

280 Table[RTLIB::LDEXP_F128] = i64_i64_func_i64_i64_i32;

281 Table[RTLIB::FREXP_F32] = f32_func_f32_iPTR;

282 Table[RTLIB::FREXP_F64] = f64_func_f64_iPTR;

283 Table[RTLIB::FREXP_F128] = i64_i64_func_i64_i64_iPTR;

284 Table[RTLIB::MODF_F32] = f32_func_f32_iPTR;

285 Table[RTLIB::MODF_F64] = f64_func_f64_iPTR;

286 Table[RTLIB::MODF_F128] = i64_i64_func_i64_i64_iPTR;

287

288

289

290 Table[RTLIB::FPEXT_F64_F128] = i64_i64_func_f64;

291 Table[RTLIB::FPEXT_F32_F128] = i64_i64_func_f32;

292 Table[RTLIB::FPEXT_F32_F64] = f64_func_f32;

293 Table[RTLIB::FPEXT_F16_F32] = f32_func_i16;

294 Table[RTLIB::FPROUND_F32_F16] = i16_func_f32;

295 Table[RTLIB::FPROUND_F64_F16] = i16_func_f64;

296 Table[RTLIB::FPROUND_F64_F32] = f32_func_f64;

297 Table[RTLIB::FPROUND_F128_F16] = i16_func_i64_i64;

298 Table[RTLIB::FPROUND_F128_F32] = f32_func_i64_i64;

299 Table[RTLIB::FPROUND_F128_F64] = f64_func_i64_i64;

300 Table[RTLIB::FPTOSINT_F32_I32] = i32_func_f32;

301 Table[RTLIB::FPTOSINT_F32_I64] = i64_func_f32;

302 Table[RTLIB::FPTOSINT_F32_I128] = i64_i64_func_f32;

303 Table[RTLIB::FPTOSINT_F64_I32] = i32_func_f64;

304 Table[RTLIB::FPTOSINT_F64_I64] = i64_func_f64;

305 Table[RTLIB::FPTOSINT_F64_I128] = i64_i64_func_f64;

306 Table[RTLIB::FPTOSINT_F128_I32] = i32_func_i64_i64;

307 Table[RTLIB::FPTOSINT_F128_I64] = i64_func_i64_i64;

308 Table[RTLIB::FPTOSINT_F128_I128] = i64_i64_func_i64_i64;

309 Table[RTLIB::FPTOUINT_F32_I32] = i32_func_f32;

310 Table[RTLIB::FPTOUINT_F32_I64] = i64_func_f32;

311 Table[RTLIB::FPTOUINT_F32_I128] = i64_i64_func_f32;

312 Table[RTLIB::FPTOUINT_F64_I32] = i32_func_f64;

313 Table[RTLIB::FPTOUINT_F64_I64] = i64_func_f64;

314 Table[RTLIB::FPTOUINT_F64_I128] = i64_i64_func_f64;

315 Table[RTLIB::FPTOUINT_F128_I32] = i32_func_i64_i64;

316 Table[RTLIB::FPTOUINT_F128_I64] = i64_func_i64_i64;

317 Table[RTLIB::FPTOUINT_F128_I128] = i64_i64_func_i64_i64;

318 Table[RTLIB::SINTTOFP_I32_F32] = f32_func_i32;

319 Table[RTLIB::SINTTOFP_I32_F64] = f64_func_i32;

320 Table[RTLIB::SINTTOFP_I32_F128] = i64_i64_func_i32;

321 Table[RTLIB::SINTTOFP_I64_F32] = f32_func_i64;

322 Table[RTLIB::SINTTOFP_I64_F64] = f64_func_i64;

323 Table[RTLIB::SINTTOFP_I64_F128] = i64_i64_func_i64;

324 Table[RTLIB::SINTTOFP_I128_F32] = f32_func_i64_i64;

325 Table[RTLIB::SINTTOFP_I128_F64] = f64_func_i64_i64;

326 Table[RTLIB::SINTTOFP_I128_F128] = i64_i64_func_i64_i64;

327 Table[RTLIB::UINTTOFP_I32_F32] = f32_func_i32;

328 Table[RTLIB::UINTTOFP_I32_F64] = f64_func_i64;

329 Table[RTLIB::UINTTOFP_I32_F128] = i64_i64_func_i32;

330 Table[RTLIB::UINTTOFP_I64_F32] = f32_func_i64;

331 Table[RTLIB::UINTTOFP_I64_F64] = f64_func_i64;

332 Table[RTLIB::UINTTOFP_I64_F128] = i64_i64_func_i64;

333 Table[RTLIB::UINTTOFP_I128_F32] = f32_func_i64_i64;

334 Table[RTLIB::UINTTOFP_I128_F64] = f64_func_i64_i64;

335 Table[RTLIB::UINTTOFP_I128_F128] = i64_i64_func_i64_i64;

336

337

338

339 Table[RTLIB::OEQ_F32] = i32_func_f32_f32;

340 Table[RTLIB::OEQ_F64] = i32_func_f64_f64;

341 Table[RTLIB::OEQ_F128] = i32_func_i64_i64_i64_i64;

342 Table[RTLIB::UNE_F32] = i32_func_f32_f32;

343 Table[RTLIB::UNE_F64] = i32_func_f64_f64;

344 Table[RTLIB::UNE_F128] = i32_func_i64_i64_i64_i64;

345 Table[RTLIB::OGE_F32] = i32_func_f32_f32;

346 Table[RTLIB::OGE_F64] = i32_func_f64_f64;

347 Table[RTLIB::OGE_F128] = i32_func_i64_i64_i64_i64;

348 Table[RTLIB::OLT_F32] = i32_func_f32_f32;

349 Table[RTLIB::OLT_F64] = i32_func_f64_f64;

350 Table[RTLIB::OLT_F128] = i32_func_i64_i64_i64_i64;

351 Table[RTLIB::OLE_F32] = i32_func_f32_f32;

352 Table[RTLIB::OLE_F64] = i32_func_f64_f64;

353 Table[RTLIB::OLE_F128] = i32_func_i64_i64_i64_i64;

354 Table[RTLIB::OGT_F32] = i32_func_f32_f32;

355 Table[RTLIB::OGT_F64] = i32_func_f64_f64;

356 Table[RTLIB::OGT_F128] = i32_func_i64_i64_i64_i64;

357 Table[RTLIB::UO_F32] = i32_func_f32_f32;

358 Table[RTLIB::UO_F64] = i32_func_f64_f64;

359 Table[RTLIB::UO_F128] = i32_func_i64_i64_i64_i64;

360

361

362 Table[RTLIB::MEMCPY] = iPTR_func_iPTR_iPTR_iPTR;

363 Table[RTLIB::MEMSET] = iPTR_func_iPTR_i32_iPTR;

364 Table[RTLIB::MEMMOVE] = iPTR_func_iPTR_iPTR_iPTR;

365

366

367 Table[RTLIB::STACKPROTECTOR_CHECK_FAIL] = func;

368

369

370 Table[RTLIB::RETURN_ADDRESS] = iPTR_func_i32;

371

372

373

374 Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_1] = unsupported;

375 Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_2] = unsupported;

376 Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_4] = unsupported;

377 Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_8] = unsupported;

378 Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_16] = unsupported;

379 Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1] = unsupported;

380 Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2] = unsupported;

381 Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4] = unsupported;

382 Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8] = unsupported;

383 Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16] = unsupported;

384

385 Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_1] = unsupported;

386 Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_2] = unsupported;

387 Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_4] = unsupported;

388 Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_8] = unsupported;

389 Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_16] = unsupported;

390

391

392

393 Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_1] = unsupported;

394 Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_2] = unsupported;

395 Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_4] = unsupported;

396 Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_8] = unsupported;

397 Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_16] = unsupported;

398 Table[RTLIB::SYNC_LOCK_TEST_AND_SET_1] = unsupported;

399 Table[RTLIB::SYNC_LOCK_TEST_AND_SET_2] = unsupported;

400 Table[RTLIB::SYNC_LOCK_TEST_AND_SET_4] = unsupported;

401 Table[RTLIB::SYNC_LOCK_TEST_AND_SET_8] = unsupported;

402 Table[RTLIB::SYNC_LOCK_TEST_AND_SET_16] = unsupported;

403 Table[RTLIB::SYNC_FETCH_AND_ADD_1] = unsupported;

404 Table[RTLIB::SYNC_FETCH_AND_ADD_2] = unsupported;

405 Table[RTLIB::SYNC_FETCH_AND_ADD_4] = unsupported;

406 Table[RTLIB::SYNC_FETCH_AND_ADD_8] = unsupported;

407 Table[RTLIB::SYNC_FETCH_AND_ADD_16] = unsupported;

408 Table[RTLIB::SYNC_FETCH_AND_SUB_1] = unsupported;

409 Table[RTLIB::SYNC_FETCH_AND_SUB_2] = unsupported;

410 Table[RTLIB::SYNC_FETCH_AND_SUB_4] = unsupported;

411 Table[RTLIB::SYNC_FETCH_AND_SUB_8] = unsupported;

412 Table[RTLIB::SYNC_FETCH_AND_SUB_16] = unsupported;

413 Table[RTLIB::SYNC_FETCH_AND_AND_1] = unsupported;

414 Table[RTLIB::SYNC_FETCH_AND_AND_2] = unsupported;

415 Table[RTLIB::SYNC_FETCH_AND_AND_4] = unsupported;

416 Table[RTLIB::SYNC_FETCH_AND_AND_8] = unsupported;

417 Table[RTLIB::SYNC_FETCH_AND_AND_16] = unsupported;

418 Table[RTLIB::SYNC_FETCH_AND_OR_1] = unsupported;

419 Table[RTLIB::SYNC_FETCH_AND_OR_2] = unsupported;

420 Table[RTLIB::SYNC_FETCH_AND_OR_4] = unsupported;

421 Table[RTLIB::SYNC_FETCH_AND_OR_8] = unsupported;

422 Table[RTLIB::SYNC_FETCH_AND_OR_16] = unsupported;

423 Table[RTLIB::SYNC_FETCH_AND_XOR_1] = unsupported;

424 Table[RTLIB::SYNC_FETCH_AND_XOR_2] = unsupported;

425 Table[RTLIB::SYNC_FETCH_AND_XOR_4] = unsupported;

426 Table[RTLIB::SYNC_FETCH_AND_XOR_8] = unsupported;

427 Table[RTLIB::SYNC_FETCH_AND_XOR_16] = unsupported;

428 Table[RTLIB::SYNC_FETCH_AND_NAND_1] = unsupported;

429 Table[RTLIB::SYNC_FETCH_AND_NAND_2] = unsupported;

430 Table[RTLIB::SYNC_FETCH_AND_NAND_4] = unsupported;

431 Table[RTLIB::SYNC_FETCH_AND_NAND_8] = unsupported;

432 Table[RTLIB::SYNC_FETCH_AND_NAND_16] = unsupported;

433 Table[RTLIB::SYNC_FETCH_AND_MAX_1] = unsupported;

434 Table[RTLIB::SYNC_FETCH_AND_MAX_2] = unsupported;

435 Table[RTLIB::SYNC_FETCH_AND_MAX_4] = unsupported;

436 Table[RTLIB::SYNC_FETCH_AND_MAX_8] = unsupported;

437 Table[RTLIB::SYNC_FETCH_AND_MAX_16] = unsupported;

438 Table[RTLIB::SYNC_FETCH_AND_UMAX_1] = unsupported;

439 Table[RTLIB::SYNC_FETCH_AND_UMAX_2] = unsupported;

440 Table[RTLIB::SYNC_FETCH_AND_UMAX_4] = unsupported;

441 Table[RTLIB::SYNC_FETCH_AND_UMAX_8] = unsupported;

442 Table[RTLIB::SYNC_FETCH_AND_UMAX_16] = unsupported;

443 Table[RTLIB::SYNC_FETCH_AND_MIN_1] = unsupported;

444 Table[RTLIB::SYNC_FETCH_AND_MIN_2] = unsupported;

445 Table[RTLIB::SYNC_FETCH_AND_MIN_4] = unsupported;

446 Table[RTLIB::SYNC_FETCH_AND_MIN_8] = unsupported;

447 Table[RTLIB::SYNC_FETCH_AND_MIN_16] = unsupported;

448 Table[RTLIB::SYNC_FETCH_AND_UMIN_1] = unsupported;

449 Table[RTLIB::SYNC_FETCH_AND_UMIN_2] = unsupported;

450 Table[RTLIB::SYNC_FETCH_AND_UMIN_4] = unsupported;

451 Table[RTLIB::SYNC_FETCH_AND_UMIN_8] = unsupported;

452 Table[RTLIB::SYNC_FETCH_AND_UMIN_16] = unsupported;

453

454

455

457 Table[RTLIB::ATOMIC_LOAD_1] = unsupported;

458 Table[RTLIB::ATOMIC_LOAD_2] = unsupported;

459 Table[RTLIB::ATOMIC_LOAD_4] = unsupported;

460 Table[RTLIB::ATOMIC_LOAD_8] = unsupported;

461 Table[RTLIB::ATOMIC_LOAD_16] = unsupported;

462

463 Table[RTLIB::ATOMIC_STORE] = unsupported;

464 Table[RTLIB::ATOMIC_STORE_1] = unsupported;

465 Table[RTLIB::ATOMIC_STORE_2] = unsupported;

466 Table[RTLIB::ATOMIC_STORE_4] = unsupported;

467 Table[RTLIB::ATOMIC_STORE_8] = unsupported;

468 Table[RTLIB::ATOMIC_STORE_16] = unsupported;

469

470 Table[RTLIB::ATOMIC_EXCHANGE] = unsupported;

471 Table[RTLIB::ATOMIC_EXCHANGE_1] = unsupported;

472 Table[RTLIB::ATOMIC_EXCHANGE_2] = unsupported;

473 Table[RTLIB::ATOMIC_EXCHANGE_4] = unsupported;

474 Table[RTLIB::ATOMIC_EXCHANGE_8] = unsupported;

475 Table[RTLIB::ATOMIC_EXCHANGE_16] = unsupported;

476

477 Table[RTLIB::ATOMIC_COMPARE_EXCHANGE] = unsupported;

478 Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_1] = unsupported;

479 Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_2] = unsupported;

480 Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_4] = unsupported;

481 Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_8] = unsupported;

482 Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_16] = unsupported;

483

484 Table[RTLIB::ATOMIC_FETCH_ADD_1] = unsupported;

485 Table[RTLIB::ATOMIC_FETCH_ADD_2] = unsupported;

486 Table[RTLIB::ATOMIC_FETCH_ADD_4] = unsupported;

487 Table[RTLIB::ATOMIC_FETCH_ADD_8] = unsupported;

488 Table[RTLIB::ATOMIC_FETCH_ADD_16] = unsupported;

489

490 Table[RTLIB::ATOMIC_FETCH_SUB_1] = unsupported;

491 Table[RTLIB::ATOMIC_FETCH_SUB_2] = unsupported;

492 Table[RTLIB::ATOMIC_FETCH_SUB_4] = unsupported;

493 Table[RTLIB::ATOMIC_FETCH_SUB_8] = unsupported;

494 Table[RTLIB::ATOMIC_FETCH_SUB_16] = unsupported;

495

496 Table[RTLIB::ATOMIC_FETCH_AND_1] = unsupported;

497 Table[RTLIB::ATOMIC_FETCH_AND_2] = unsupported;

498 Table[RTLIB::ATOMIC_FETCH_AND_4] = unsupported;

499 Table[RTLIB::ATOMIC_FETCH_AND_8] = unsupported;

500 Table[RTLIB::ATOMIC_FETCH_AND_16] = unsupported;

501

502 Table[RTLIB::ATOMIC_FETCH_OR_1] = unsupported;

503 Table[RTLIB::ATOMIC_FETCH_OR_2] = unsupported;

504 Table[RTLIB::ATOMIC_FETCH_OR_4] = unsupported;

505 Table[RTLIB::ATOMIC_FETCH_OR_8] = unsupported;

506 Table[RTLIB::ATOMIC_FETCH_OR_16] = unsupported;

507

508 Table[RTLIB::ATOMIC_FETCH_XOR_1] = unsupported;

509 Table[RTLIB::ATOMIC_FETCH_XOR_2] = unsupported;

510 Table[RTLIB::ATOMIC_FETCH_XOR_4] = unsupported;

511 Table[RTLIB::ATOMIC_FETCH_XOR_8] = unsupported;

512 Table[RTLIB::ATOMIC_FETCH_XOR_16] = unsupported;

513

514 Table[RTLIB::ATOMIC_FETCH_NAND_1] = unsupported;

515 Table[RTLIB::ATOMIC_FETCH_NAND_2] = unsupported;

516 Table[RTLIB::ATOMIC_FETCH_NAND_4] = unsupported;

517 Table[RTLIB::ATOMIC_FETCH_NAND_8] = unsupported;

518 Table[RTLIB::ATOMIC_FETCH_NAND_16] = unsupported;

519 }

520};

521

522RuntimeLibcallSignatureTable &getRuntimeLibcallSignatures() {

523 static RuntimeLibcallSignatureTable RuntimeLibcallSignatures;

524 return RuntimeLibcallSignatures;

525}

526

527

528

529struct StaticLibcallNameMap {

530 StringMapRTLIB::Libcall Map;

531 StaticLibcallNameMap(const Triple &TT) {

532

533

534 RTLIB::RuntimeLibcallsInfo RTCI(TT);

535

537 getRuntimeLibcallSignatures().Table;

539 if (!RTCI.isAvailable(Impl))

540 continue;

543 StringRef NameLibcall =

545

546 if (!Map.insert({NameLibcall, LC}).second)

548 }

549 }

550 }

551};

552

553}

554

556 RTLIB::Libcall LC,

561

564

565 auto &Table = getRuntimeLibcallSignatures().Table;

566 switch (Table[LC]) {

567 case func:

568 break;

569 case f32_func_f32:

572 break;

573 case f32_func_f64:

576 break;

577 case f32_func_i32:

580 break;

581 case f32_func_i64:

584 break;

585 case f32_func_i16:

588 break;

589 case f64_func_f32:

592 break;

593 case f64_func_f64:

596 break;

597 case f64_func_i32:

600 break;

601 case f64_func_i64:

604 break;

605 case i32_func_f32:

608 break;

609 case i32_func_f64:

612 break;

613 case i32_func_i32:

616 break;

617 case i64_func_f32:

620 break;

621 case i64_func_f64:

624 break;

625 case i64_func_i64:

628 break;

629 case f32_func_f32_f32:

633 break;

634 case f32_func_f32_i32:

638 break;

639 case f32_func_f32_iPTR:

643 break;

644 case f32_func_i64_i64:

648 break;

649 case f64_func_f64_f64:

653 break;

654 case f64_func_f64_i32:

658 break;

659 case f64_func_i64_i64:

663 break;

664 case f64_func_f64_iPTR:

668 break;

669 case i16_func_f32:

672 break;

673 case i16_func_f64:

676 break;

677 case i16_func_i64_i64:

681 break;

682 case i8_func_i8_i8:

686 break;

687 case func_f32_iPTR_iPTR:

691 break;

692 case func_f64_iPTR_iPTR:

696 break;

697 case i16_func_i16_i16:

701 break;

702 case i32_func_f32_f32:

706 break;

707 case i32_func_f64_f64:

711 break;

712 case i32_func_i32_i32:

716 break;

717 case i32_func_i32_i32_iPTR:

722 break;

723 case i64_func_i64_i64:

727 break;

728 case i64_func_i64_i64_iPTR:

733 break;

734 case i64_i64_func_f32:

738 } else {

740 }

742 break;

743 case i64_i64_func_f64:

747 } else {

749 }

751 break;

752 case i16_i16_func_i16_i16:

756 } else {

758 }

761 break;

762 case i32_i32_func_i32_i32:

766 } else {

768 }

771 break;

772 case i64_i64_func_i64_i64:

776 } else {

778 }

781 break;

782 case i64_i64_func_i64_i64_iPTR:

786 } else {

788 }

792 break;

793 case i64_i64_func_i64_i64_i64_i64:

797 } else {

799 }

804 break;

805 case i64_i64_func_i64_i64_i64_i64_iPTR:

809 } else {

811 }

817 break;

818 case i64_i64_i64_i64_func_i64_i64_i64_i64:

824 } else {

826 }

831 break;

832 case i64_i64_func_i64_i64_i32:

836 } else {

838 }

842 break;

843 case iPTR_func_i32:

846 break;

847 case iPTR_func_iPTR_i32_iPTR:

852 break;

853 case iPTR_func_iPTR_iPTR_iPTR:

858 break;

859 case f32_func_f32_f32_f32:

864 break;

865 case f64_func_f64_f64_f64:

870 break;

871 case func_i64_i64_iPTR_iPTR:

876 break;

877 case i32_func_i64_i64:

881 break;

882 case i32_func_i64_i64_i64_i64:

888 break;

889 case iPTR_func_f32:

892 break;

893 case iPTR_func_f64:

896 break;

897 case iPTR_func_i64_i64:

901 break;

902 case i64_i64_func_i64_i64_i64_i64_i64_i64:

906 } else {

908 }

915 break;

916 case i64_i64_func_i32:

920 } else {

922 }

924 break;

925 case i64_i64_func_i64:

929 } else {

931 }

933 break;

936 }

937}

938

939

940

945 static StaticLibcallNameMap LibcallNameMap(Subtarget.getTargetTriple());

946 auto &Map = LibcallNameMap.Map;

947 auto Val = Map.find(Name);

948#ifndef NDEBUG

949 if (Val == Map.end()) {

950 auto Message =

951 std::string("unexpected runtime library name: ") + std::string(Name);

953 }

954#endif

956}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

static Error unsupported(const char *Str, const Triple &T)

This file provides signature information for runtime libcalls.

This file declares the WebAssembly-specific subclass of TargetSubtarget.

This file contains the declaration of the WebAssembly-specific utility functions.

This class consists of common code factored out of the SmallVector class to reduce code duplication b...

void push_back(const T &Elt)

StringRef - Represent a constant reference to a string, i.e.

const Triple & getTargetTriple() const

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

static auto libcall_impls()

bool canLowerMultivalueReturn(const WebAssemblySubtarget *Subtarget)

Returns true if multivalue returns of a function can be lowered directly, i.e., not indirectly via a ...

void getLibcallSignature(const WebAssemblySubtarget &Subtarget, RTLIB::Libcall LC, SmallVectorImpl< wasm::ValType > &Rets, SmallVectorImpl< wasm::ValType > &Params)

Definition WebAssemblyRuntimeLibcallSignatures.cpp:555

This is an optimization pass for GlobalISel generic memory operations.

ArrayRef(const T &OneElt) -> ArrayRef< T >

static StringRef getLibcallImplName(RTLIB::LibcallImpl CallImpl)

Get the libcall routine name for the specified libcall implementation.

static RTLIB::Libcall getLibcallFromImpl(RTLIB::LibcallImpl Impl)

Return the libcall provided by Impl.