@@ -288,6 +288,154 @@ unsigned __int64 check__readx18qword(unsigned LONG offset) {
288
288
// CHECK-MSCOMPAT: %[[RETVAL:.*]] = load i64, ptr %[[PTR]], align 1
289
289
// CHECK-MSCOMPAT: ret i64 %[[RETVAL]]
290
290
291
+ #ifdef __LP64__
292
+ void check__addx18byte (unsigned char data , unsigned LONG offset ) {
293
+ #else
294
+ void check__addx18byte (unsigned LONG offset , unsigned char data ) {
295
+ #endif
296
+ __addx18byte (offset , data );
297
+ }
298
+
299
+ // CHECK-MSCOMPAT: %[[DATA_ADDR:.*]] = alloca i8, align 1
300
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
301
+ // CHECK-MSCOMPAT: store i8 %data, ptr %[[DATA_ADDR]], align 1
302
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
303
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
304
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
305
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
306
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
307
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
308
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i8, ptr %[[PTR]], align 1
309
+ // CHECK-MSCOMPAT: %[[DATA:.*]] = load i8, ptr %[[DATA_ADDR]], align 1
310
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i8 %[[ORIG_VAL]], %[[DATA]]
311
+ // CHECK-MSCOMPAT: store i8 %[[SUM]], ptr %[[PTR]], align 1
312
+
313
+ #ifdef __LP64__
314
+ void check__addx18word (unsigned short data , unsigned LONG offset ) {
315
+ #else
316
+ void check__addx18word (unsigned LONG offset , unsigned short data ) {
317
+ #endif
318
+ __addx18word (offset , data );
319
+ }
320
+
321
+ // CHECK-MSCOMPAT: %[[DATA_ADDR:.*]] = alloca i16, align 2
322
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
323
+ // CHECK-MSCOMPAT: store i16 %data, ptr %[[DATA_ADDR]], align 2
324
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
325
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
326
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
327
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
328
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
329
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
330
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i16, ptr %[[PTR]], align 1
331
+ // CHECK-MSCOMPAT: %[[DATA:.*]] = load i16, ptr %[[DATA_ADDR]], align 2
332
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i16 %[[ORIG_VAL]], %[[DATA]]
333
+ // CHECK-MSCOMPAT: store i16 %[[SUM]], ptr %[[PTR]], align 1
334
+
335
+ #ifdef __LP64__
336
+ void check__addx18dword (unsigned LONG data , unsigned LONG offset ) {
337
+ #else
338
+ void check__addx18dword (unsigned LONG offset , unsigned LONG data ) {
339
+ #endif
340
+ __addx18dword (offset , data );
341
+ }
342
+
343
+ // CHECK-MSCOMPAT: %[[DATA_ADDR:.*]] = alloca i32, align 4
344
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
345
+ // CHECK-MSCOMPAT: store i32 %data, ptr %[[DATA_ADDR]], align 4
346
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
347
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
348
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
349
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
350
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
351
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
352
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i32, ptr %[[PTR]], align 1
353
+ // CHECK-MSCOMPAT: %[[DATA:.*]] = load i32, ptr %[[DATA_ADDR]], align 4
354
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i32 %[[ORIG_VAL]], %[[DATA]]
355
+ // CHECK-MSCOMPAT: store i32 %[[SUM]], ptr %[[PTR]], align 1
356
+
357
+ #ifdef __LP64__
358
+ void check__addx18qword (unsigned __int64 data , unsigned LONG offset ) {
359
+ #else
360
+ void check__addx18qword (unsigned LONG offset , unsigned __int64 data ) {
361
+ #endif
362
+ __addx18qword (offset , data );
363
+ }
364
+
365
+ // CHECK-MSCOMPAT: %[[DATA_ADDR:.*]] = alloca i64, align 8
366
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
367
+ // CHECK-MSCOMPAT: store i64 %data, ptr %[[DATA_ADDR]], align 8
368
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
369
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
370
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
371
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
372
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
373
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
374
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i64, ptr %[[PTR]], align 1
375
+ // CHECK-MSCOMPAT: %[[DATA:.*]] = load i64, ptr %[[DATA_ADDR]], align 8
376
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i64 %[[ORIG_VAL]], %[[DATA]]
377
+ // CHECK-MSCOMPAT: store i64 %[[SUM]], ptr %[[PTR]], align 1
378
+
379
+ void check__incx18byte (unsigned LONG offset ) {
380
+ __incx18byte (offset );
381
+ }
382
+
383
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
384
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
385
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
386
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
387
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
388
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
389
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
390
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i8, ptr %[[PTR]], align 1
391
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i8 %[[ORIG_VAL]], 1
392
+ // CHECK-MSCOMPAT: store i8 %[[SUM]], ptr %[[PTR]], align 1
393
+
394
+ void check__incx18word (unsigned LONG offset ) {
395
+ __incx18word (offset );
396
+ }
397
+
398
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
399
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
400
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
401
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
402
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
403
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
404
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
405
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i16, ptr %[[PTR]], align 1
406
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i16 %[[ORIG_VAL]], 1
407
+ // CHECK-MSCOMPAT: store i16 %[[SUM]], ptr %[[PTR]], align 1
408
+
409
+ void check__incx18dword (unsigned LONG offset ) {
410
+ __incx18dword (offset );
411
+ }
412
+
413
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
414
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
415
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
416
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
417
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
418
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
419
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
420
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i32, ptr %[[PTR]], align 1
421
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i32 %[[ORIG_VAL]], 1
422
+ // CHECK-MSCOMPAT: store i32 %[[SUM]], ptr %[[PTR]], align 1
423
+
424
+ void check__incx18qword (unsigned LONG offset ) {
425
+ __incx18qword (offset );
426
+ }
427
+
428
+ // CHECK-MSCOMPAT: %[[OFFSET_ADDR:.*]] = alloca i32, align 4
429
+ // CHECK-MSCOMPAT: store i32 %offset, ptr %[[OFFSET_ADDR]], align 4
430
+ // CHECK-MSCOMPAT: %[[X18:.*]] = call i64 @llvm.read_register.i64(metadata ![[MD2]])
431
+ // CHECK-MSCOMPAT: %[[X18_AS_PTR:.*]] = inttoptr i64 %[[X18]] to ptr
432
+ // CHECK-MSCOMPAT: %[[OFFSET:.*]] = load i32, ptr %[[OFFSET_ADDR]], align 4
433
+ // CHECK-MSCOMPAT: %[[ZEXT_OFFSET:.*]] = zext i32 %[[OFFSET]] to i64
434
+ // CHECK-MSCOMPAT: %[[PTR:.*]] = getelementptr i8, ptr %[[X18_AS_PTR]], i64 %[[ZEXT_OFFSET]]
435
+ // CHECK-MSCOMPAT: %[[ORIG_VAL:.*]] = load i64, ptr %[[PTR]], align 1
436
+ // CHECK-MSCOMPAT: %[[SUM:.*]] = add i64 %[[ORIG_VAL]], 1
437
+ // CHECK-MSCOMPAT: store i64 %[[SUM]], ptr %[[PTR]], align 1
438
+
291
439
double check__CopyDoubleFromInt64 (__int64 arg1 ) {
292
440
return _CopyDoubleFromInt64 (arg1 );
293
441
}
0 commit comments