@@ -265,5 +265,143 @@ unsigned __int64 check__readx18qword(unsigned LONG offset) {
265
265
// CHECK-MSCOMPAT: %[[RETVAL:.*]] = load i64, ptr %[[PTR]], align 1
266
266
// CHECK-MSCOMPAT: ret i64 %[[RETVAL]]
267
267
268
+ double check__CopyDoubleFromInt64 (__int64 arg1 ) {
269
+ return _CopyDoubleFromInt64 (arg1 );
270
+ }
271
+
272
+ // CHECK-MSCOMPAT: %[[RETVAL:.*]] = alloca double, align 8
273
+ // CHECK-MSCOMPAT: %[[ARG:.*]].addr = alloca i64, align 8
274
+ // CHECK-MSCOMPAT: store i64 %[[ARG]], ptr %[[ARG]].addr, align 8
275
+ // CHECK-MSCOMPAT: %[[VAR0:.*]] = load i64, ptr %[[ARG]].addr, align 8
276
+ // CHECK-MSCOMPAT: store i64 %[[VAR0]], ptr %[[RETVAL]], align 8
277
+ // CHECK-MSCOMPAT: %[[VAR1:.*]] = load double, ptr %[[RETVAL]], align 8
278
+ // CHECK-MSCOMPAT: ret double %[[VAR1]]
279
+ // CHECK-LINUX: error: call to undeclared function '_CopyDoubleFromInt64'
280
+
281
+ float check__CopyFloatFromInt32 (__int32 arg1 ) {
282
+ return _CopyFloatFromInt32 (arg1 );
283
+ }
284
+
285
+ // CHECK-MSCOMPAT: %[[RETVAL:.*]] = alloca float, align 4
286
+ // CHECK-MSCOMPAT: %[[ARG:.*]].addr = alloca i32, align 4
287
+ // CHECK-MSCOMPAT: store i32 %[[ARG]], ptr %[[ARG]].addr, align 4
288
+ // CHECK-MSCOMPAT: %[[VAR0:.*]] = load i32, ptr %[[ARG]].addr, align 4
289
+ // CHECK-MSCOMPAT: store i32 %[[VAR0]], ptr %[[RETVAL]], align 4
290
+ // CHECK-MSCOMPAT: %[[VAR1:.*]] = load float, ptr %[[RETVAL]], align 4
291
+ // CHECK-MSCOMPAT: ret float %[[VAR1]]
292
+ // CHECK-LINUX: error: call to undeclared function '_CopyFloatFromInt32'
293
+
294
+ __int32 check__CopyInt32FromFloat (float arg1 ) {
295
+ return _CopyInt32FromFloat (arg1 );
296
+ }
297
+
298
+ // CHECK-MSCOMPAT: %[[RETVAL:.*]] = alloca i32, align 4
299
+ // CHECK-MSCOMPAT: %[[ARG:.*]].addr = alloca float, align 4
300
+ // CHECK-MSCOMPAT: store float %[[ARG]], ptr %[[ARG]].addr, align 4
301
+ // CHECK-MSCOMPAT: %[[VAR0:.*]] = load float, ptr %[[ARG]].addr, align 4
302
+ // CHECK-MSCOMPAT: store float %[[VAR0]], ptr %[[RETVAL]], align 4
303
+ // CHECK-MSCOMPAT: %[[VAR1:.*]] = load i32, ptr %[[RETVAL]], align 4
304
+ // CHECK-MSCOMPAT: ret i32 %[[VAR1]]
305
+ // CHECK-LINUX: error: call to undeclared function '_CopyInt32FromFloat'
306
+
307
+ __int64 check__CopyInt64FromDouble (double arg1 ) {
308
+ return _CopyInt64FromDouble (arg1 );
309
+ }
310
+
311
+ // CHECK-MSCOMPAT: %[[RETVAL:.*]] = alloca i64, align 8
312
+ // CHECK-MSCOMPAT: %[[ARG:.*]].addr = alloca double, align 8
313
+ // CHECK-MSCOMPAT: store double %[[ARG]], ptr %[[ARG]].addr, align 8
314
+ // CHECK-MSCOMPAT: %[[VAR0:.*]] = load double, ptr %[[ARG]].addr, align 8
315
+ // CHECK-MSCOMPAT: store double %[[VAR0]], ptr %[[RETVAL]], align 8
316
+ // CHECK-MSCOMPAT: %[[VAR1:.*]] = load i64, ptr %[[RETVAL]], align 8
317
+ // CHECK-MSCOMPAT: ret i64 %[[VAR1]]
318
+ // CHECK-LINUX: error: call to undeclared function '_CopyInt64FromDouble'
319
+
320
+ unsigned int check__CountLeadingOnes (unsigned LONG arg1 ) {
321
+ return _CountLeadingOnes (arg1 );
322
+ }
323
+
324
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i32, align 4
325
+ // CHECK-MSVC: store i32 %[[ARG1]], ptr %[[ARG1]].addr, align 4
326
+ // CHECK-MSVC: %[[VAR0:.*]] = load i32, ptr %[[ARG1]].addr, align 4
327
+ // CHECK-MSVC: %[[VAR1:.*]] = xor i32 %[[VAR0]], -1
328
+ // CHECK-MSVC: %[[VAR2:.*]] = call i32 @llvm.ctlz.i32(i32 %1, i1 false)
329
+ // CHECK-MSVC: ret i32 %[[VAR2]]
330
+
331
+ unsigned int check__CountLeadingOnes64 (unsigned __int64 arg1 ) {
332
+ return _CountLeadingOnes64 (arg1 );
333
+ }
334
+
335
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i64, align 8
336
+ // CHECK-MSVC: store i64 %[[ARG1]], ptr %[[ARG1]].addr, align 8
337
+ // CHECK-MSVC: %[[VAR0:.*]] = load i64, ptr %[[ARG1]].addr, align 8
338
+ // CHECK-MSVC: %[[VAR1:.*]] = xor i64 %[[VAR0]], -1
339
+ // CHECK-MSVC: %[[VAR2:.*]] = call i64 @llvm.ctlz.i64(i64 %1, i1 false)
340
+ // CHECK-MSVC: %[[VAR3:.*]] = trunc i64 %2 to i32
341
+ // CHECK-MSVC: ret i32 %[[VAR3]]
342
+
343
+ unsigned int check__CountLeadingSigns (__int32 arg1 ) {
344
+ return _CountLeadingSigns (arg1 );
345
+ }
346
+
347
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i32, align 4
348
+ // CHECK-MSVC: store i32 %[[ARG1]], ptr %[[ARG1]].addr, align 4
349
+ // CHECK-MSVC: %[[VAR0:.*]] = load i32, ptr %[[ARG1]].addr, align 4
350
+ // CHECK-MSVC: %[[CLS:.*]] = call i32 @llvm.aarch64.cls(i32 %[[VAR0]])
351
+ // CHECK-MSVC: ret i32 %[[CLS]]
352
+
353
+ unsigned int check__CountLeadingSigns64 (__int64 arg1 ) {
354
+ return _CountLeadingSigns64 (arg1 );
355
+ }
356
+
357
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i64, align 8
358
+ // CHECK-MSVC: store i64 %[[ARG1]], ptr %[[ARG1]].addr, align 8
359
+ // CHECK-MSVC: %[[VAR0:.*]] = load i64, ptr %[[ARG1]].addr, align 8
360
+ // CHECK-MSVC: %[[CLS:.*]] = call i32 @llvm.aarch64.cls64(i64 %[[VAR0]])
361
+ // CHECK-MSVC: ret i32 %[[CLS]]
362
+
363
+ unsigned int check__CountLeadingZeros (__int32 arg1 ) {
364
+ return _CountLeadingZeros (arg1 );
365
+ }
366
+
367
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i32, align 4
368
+ // CHECK-MSVC: store i32 %[[ARG1]], ptr %[[ARG1]].addr, align 4
369
+ // CHECK-MSVC: %[[VAR0:.*]] = load i32, ptr %[[ARG1]].addr, align 4
370
+ // CHECK-MSVC: %[[VAR1:.*]] = call i32 @llvm.ctlz.i32(i32 %[[VAR0]], i1 false)
371
+ // CHECK-MSVC: ret i32 %[[VAR1]]
372
+
373
+ unsigned int check__CountLeadingZeros64 (__int64 arg1 ) {
374
+ return _CountLeadingZeros64 (arg1 );
375
+ }
376
+
377
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i64, align 8
378
+ // CHECK-MSVC: store i64 %[[ARG1]], ptr %[[ARG1]].addr, align 8
379
+ // CHECK-MSVC: %[[VAR0:.*]] = load i64, ptr %[[ARG1]].addr, align 8
380
+ // CHECK-MSVC: %[[VAR1:.*]] = call i64 @llvm.ctlz.i64(i64 %[[VAR0]], i1 false)
381
+ // CHECK-MSVC: %[[VAR2:.*]] = trunc i64 %[[VAR1]] to i32
382
+ // CHECK-MSVC: ret i32 %[[VAR2]]
383
+
384
+ unsigned int check_CountOneBits (unsigned LONG arg1 ) {
385
+ return _CountOneBits (arg1 );
386
+ }
387
+
388
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i32, align 4
389
+ // CHECK-MSVC: store i32 %[[ARG1]], ptr %[[ARG1]].addr, align 4
390
+ // CHECK-MSVC: %[[VAR0:.*]] = load i32, ptr %[[ARG1]].addr, align 4
391
+ // CHECK-MSVC: %[[VAR1:.*]] = call i32 @llvm.ctpop.i32(i32 %0)
392
+ // CHECK-MSVC: ret i32 %[[VAR1]]
393
+
394
+ unsigned int check_CountOneBits64 (unsigned __int64 arg1 ) {
395
+ return _CountOneBits64 (arg1 );
396
+ }
397
+
398
+ // CHECK-MSVC: %[[ARG1:.*]].addr = alloca i64, align 8
399
+ // CHECK-MSVC: store i64 %[[ARG1]], ptr %[[ARG1]].addr, align 8
400
+ // CHECK-MSVC: %[[VAR0:.*]] = load i64, ptr %[[ARG1]].addr, align 8
401
+ // CHECK-MSVC: %[[VAR1:.*]] = call i64 @llvm.ctpop.i64(i64 %0)
402
+ // CHECK-MSVC: %[[VAR2:.*]] = trunc i64 %1 to i32
403
+ // CHECK-MSVC: ret i32 %[[VAR2]]
404
+
405
+
268
406
// CHECK-MSCOMPAT: ![[MD2]] = !{!"x18"}
269
407
// CHECK-MSCOMPAT: ![[MD3]] = !{!"sp"}
0 commit comments