1
1
//! Executes LR and SC instructions with various parameters. This test will
2
2
//! exercise the emulation code (`emulate-lr-sc`) on some targets.
3
- use core:: { marker:: PhantomData , mem:: MaybeUninit , ptr:: raw_mut } ;
3
+ use core:: { marker:: PhantomData , mem:: MaybeUninit , ptr:: addr_of_mut } ;
4
4
use r3:: {
5
5
kernel:: { cfg:: CfgBuilder , StartupHook , Task } ,
6
6
prelude:: * ,
@@ -272,127 +272,127 @@ unsafe fn do_test<System: Kernel>() {
272
272
// `lr.w _, (x6)`
273
273
// ------------------------------------------------------------------
274
274
exec ! ( "la x6, {VAR}; lr.w x0, (x6)" , |st| {
275
- st. x[ 6 ] = raw_mut !( VAR ) as _;
275
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
276
276
} ) ;
277
277
exec ! ( "la x6, {VAR}; lr.w x1, (x6)" , |st| {
278
- st. x[ 6 ] = raw_mut !( VAR ) as _;
278
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
279
279
st. x[ 1 ] = VAR_SEXT ;
280
280
} ) ;
281
281
// `lr.w sp, (_)` is not supported by this test harness nor
282
282
// `emulate-lr-sc`.
283
283
exec ! ( "la x6, {VAR}; lr.w x3, (x6)" , |st| {
284
- st. x[ 6 ] = raw_mut !( VAR ) as _;
284
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
285
285
st. x[ 3 ] = VAR_SEXT ;
286
286
} ) ;
287
287
exec ! ( "la x6, {VAR}; lr.w x4, (x6)" , |st| {
288
- st. x[ 6 ] = raw_mut !( VAR ) as _;
288
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
289
289
st. x[ 4 ] = VAR_SEXT ;
290
290
} ) ;
291
291
exec ! ( "la x6, {VAR}; lr.w x5, (x6)" , |st| {
292
- st. x[ 6 ] = raw_mut !( VAR ) as _;
292
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
293
293
st. x[ 5 ] = VAR_SEXT ;
294
294
} ) ;
295
295
exec ! ( "la x6, {VAR}; lr.w x6, (x6)" , |st| {
296
296
st. x[ 6 ] = VAR_SEXT ;
297
297
} ) ;
298
298
exec ! ( "la x6, {VAR}; lr.w x7, (x6)" , |st| {
299
- st. x[ 6 ] = raw_mut !( VAR ) as _;
299
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
300
300
st. x[ 7 ] = VAR_SEXT ;
301
301
} ) ;
302
302
exec ! ( "la x6, {VAR}; lr.w x8, (x6)" , |st| {
303
- st. x[ 6 ] = raw_mut !( VAR ) as _;
303
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
304
304
st. x[ 8 ] = VAR_SEXT ;
305
305
} ) ;
306
306
exec ! ( "la x6, {VAR}; lr.w x9, (x6)" , |st| {
307
- st. x[ 6 ] = raw_mut !( VAR ) as _;
307
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
308
308
st. x[ 9 ] = VAR_SEXT ;
309
309
} ) ;
310
310
exec ! ( "la x6, {VAR}; lr.w x10, (x6)" , |st| {
311
- st. x[ 6 ] = raw_mut !( VAR ) as _;
311
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
312
312
st. x[ 10 ] = VAR_SEXT ;
313
313
} ) ;
314
314
exec ! ( "la x6, {VAR}; lr.w x11, (x6)" , |st| {
315
- st. x[ 6 ] = raw_mut !( VAR ) as _;
315
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
316
316
st. x[ 11 ] = VAR_SEXT ;
317
317
} ) ;
318
318
exec ! ( "la x6, {VAR}; lr.w x12, (x6)" , |st| {
319
- st. x[ 6 ] = raw_mut !( VAR ) as _;
319
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
320
320
st. x[ 12 ] = VAR_SEXT ;
321
321
} ) ;
322
322
exec ! ( "la x6, {VAR}; lr.w x13, (x6)" , |st| {
323
- st. x[ 6 ] = raw_mut !( VAR ) as _;
323
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
324
324
st. x[ 13 ] = VAR_SEXT ;
325
325
} ) ;
326
326
exec ! ( "la x6, {VAR}; lr.w x14, (x6)" , |st| {
327
- st. x[ 6 ] = raw_mut !( VAR ) as _;
327
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
328
328
st. x[ 14 ] = VAR_SEXT ;
329
329
} ) ;
330
330
exec ! ( "la x6, {VAR}; lr.w x15, (x6)" , |st| {
331
- st. x[ 6 ] = raw_mut !( VAR ) as _;
331
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
332
332
st. x[ 15 ] = VAR_SEXT ;
333
333
} ) ;
334
334
exec ! ( "la x6, {VAR}; lr.w x16, (x6)" , |st| {
335
- st. x[ 6 ] = raw_mut !( VAR ) as _;
335
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
336
336
st. x[ 16 ] = VAR_SEXT ;
337
337
} ) ;
338
338
exec ! ( "la x6, {VAR}; lr.w x17, (x6)" , |st| {
339
- st. x[ 6 ] = raw_mut !( VAR ) as _;
339
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
340
340
st. x[ 17 ] = VAR_SEXT ;
341
341
} ) ;
342
342
exec ! ( "la x6, {VAR}; lr.w x18, (x6)" , |st| {
343
- st. x[ 6 ] = raw_mut !( VAR ) as _;
343
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
344
344
st. x[ 18 ] = VAR_SEXT ;
345
345
} ) ;
346
346
exec ! ( "la x6, {VAR}; lr.w x19, (x6)" , |st| {
347
- st. x[ 6 ] = raw_mut !( VAR ) as _;
347
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
348
348
st. x[ 19 ] = VAR_SEXT ;
349
349
} ) ;
350
350
exec ! ( "la x6, {VAR}; lr.w x20, (x6)" , |st| {
351
- st. x[ 6 ] = raw_mut !( VAR ) as _;
351
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
352
352
st. x[ 20 ] = VAR_SEXT ;
353
353
} ) ;
354
354
exec ! ( "la x6, {VAR}; lr.w x21, (x6)" , |st| {
355
- st. x[ 6 ] = raw_mut !( VAR ) as _;
355
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
356
356
st. x[ 21 ] = VAR_SEXT ;
357
357
} ) ;
358
358
exec ! ( "la x6, {VAR}; lr.w x22, (x6)" , |st| {
359
- st. x[ 6 ] = raw_mut !( VAR ) as _;
359
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
360
360
st. x[ 22 ] = VAR_SEXT ;
361
361
} ) ;
362
362
exec ! ( "la x6, {VAR}; lr.w x23, (x6)" , |st| {
363
- st. x[ 6 ] = raw_mut !( VAR ) as _;
363
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
364
364
st. x[ 23 ] = VAR_SEXT ;
365
365
} ) ;
366
366
exec ! ( "la x6, {VAR}; lr.w x24, (x6)" , |st| {
367
- st. x[ 6 ] = raw_mut !( VAR ) as _;
367
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
368
368
st. x[ 24 ] = VAR_SEXT ;
369
369
} ) ;
370
370
exec ! ( "la x6, {VAR}; lr.w x25, (x6)" , |st| {
371
- st. x[ 6 ] = raw_mut !( VAR ) as _;
371
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
372
372
st. x[ 25 ] = VAR_SEXT ;
373
373
} ) ;
374
374
exec ! ( "la x6, {VAR}; lr.w x26, (x6)" , |st| {
375
- st. x[ 6 ] = raw_mut !( VAR ) as _;
375
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
376
376
st. x[ 26 ] = VAR_SEXT ;
377
377
} ) ;
378
378
exec ! ( "la x6, {VAR}; lr.w x27, (x6)" , |st| {
379
- st. x[ 6 ] = raw_mut !( VAR ) as _;
379
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
380
380
st. x[ 27 ] = VAR_SEXT ;
381
381
} ) ;
382
382
exec ! ( "la x6, {VAR}; lr.w x28, (x6)" , |st| {
383
- st. x[ 6 ] = raw_mut !( VAR ) as _;
383
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
384
384
st. x[ 28 ] = VAR_SEXT ;
385
385
} ) ;
386
386
exec ! ( "la x6, {VAR}; lr.w x29, (x6)" , |st| {
387
- st. x[ 6 ] = raw_mut !( VAR ) as _;
387
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
388
388
st. x[ 29 ] = VAR_SEXT ;
389
389
} ) ;
390
390
exec ! ( "la x6, {VAR}; lr.w x30, (x6)" , |st| {
391
- st. x[ 6 ] = raw_mut !( VAR ) as _;
391
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
392
392
st. x[ 30 ] = VAR_SEXT ;
393
393
} ) ;
394
394
exec ! ( "la x6, {VAR}; lr.w x31, (x6)" , |st| {
395
- st. x[ 6 ] = raw_mut !( VAR ) as _;
395
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
396
396
st. x[ 31 ] = VAR_SEXT ;
397
397
} ) ;
398
398
@@ -402,7 +402,7 @@ unsafe fn do_test<System: Kernel>() {
402
402
// `lr.w _, (x0)` will never succeed unless there's valid data at `0`
403
403
404
404
exec ! ( "la x1, {VAR}; lr.w x6, (x1)" , |st| {
405
- st. x[ 1 ] = raw_mut !( VAR ) as _;
405
+ st. x[ 1 ] = addr_of_mut !( VAR ) as _;
406
406
st. x[ 6 ] = VAR_SEXT ;
407
407
} ) ;
408
408
@@ -419,119 +419,119 @@ unsafe fn do_test<System: Kernel>() {
419
419
) ;
420
420
421
421
exec ! ( "la x3, {VAR}; lr.w x6, (x3)" , |st| {
422
- st. x[ 3 ] = raw_mut !( VAR ) as _;
422
+ st. x[ 3 ] = addr_of_mut !( VAR ) as _;
423
423
st. x[ 6 ] = VAR_SEXT ;
424
424
} ) ;
425
425
exec ! ( "la x4, {VAR}; lr.w x6, (x4)" , |st| {
426
- st. x[ 4 ] = raw_mut !( VAR ) as _;
426
+ st. x[ 4 ] = addr_of_mut !( VAR ) as _;
427
427
st. x[ 6 ] = VAR_SEXT ;
428
428
} ) ;
429
429
exec ! ( "la x5, {VAR}; lr.w x6, (x5)" , |st| {
430
- st. x[ 5 ] = raw_mut !( VAR ) as _;
430
+ st. x[ 5 ] = addr_of_mut !( VAR ) as _;
431
431
st. x[ 6 ] = VAR_SEXT ;
432
432
} ) ;
433
433
exec ! ( "la x6, {VAR}; lr.w x7, (x6)" , |st| {
434
- st. x[ 6 ] = raw_mut !( VAR ) as _;
434
+ st. x[ 6 ] = addr_of_mut !( VAR ) as _;
435
435
st. x[ 7 ] = VAR_SEXT ;
436
436
} ) ;
437
437
exec ! ( "la x7, {VAR}; lr.w x6, (x7)" , |st| {
438
- st. x[ 7 ] = raw_mut !( VAR ) as _;
438
+ st. x[ 7 ] = addr_of_mut !( VAR ) as _;
439
439
st. x[ 6 ] = VAR_SEXT ;
440
440
} ) ;
441
441
exec ! ( "la x8, {VAR}; lr.w x6, (x8)" , |st| {
442
- st. x[ 8 ] = raw_mut !( VAR ) as _;
442
+ st. x[ 8 ] = addr_of_mut !( VAR ) as _;
443
443
st. x[ 6 ] = VAR_SEXT ;
444
444
} ) ;
445
445
exec ! ( "la x9, {VAR}; lr.w x6, (x9)" , |st| {
446
- st. x[ 9 ] = raw_mut !( VAR ) as _;
446
+ st. x[ 9 ] = addr_of_mut !( VAR ) as _;
447
447
st. x[ 6 ] = VAR_SEXT ;
448
448
} ) ;
449
449
exec ! ( "la x10, {VAR}; lr.w x6, (x10)" , |st| {
450
- st. x[ 10 ] = raw_mut !( VAR ) as _;
450
+ st. x[ 10 ] = addr_of_mut !( VAR ) as _;
451
451
st. x[ 6 ] = VAR_SEXT ;
452
452
} ) ;
453
453
exec ! ( "la x11, {VAR}; lr.w x6, (x11)" , |st| {
454
- st. x[ 11 ] = raw_mut !( VAR ) as _;
454
+ st. x[ 11 ] = addr_of_mut !( VAR ) as _;
455
455
st. x[ 6 ] = VAR_SEXT ;
456
456
} ) ;
457
457
exec ! ( "la x12, {VAR}; lr.w x6, (x12)" , |st| {
458
- st. x[ 12 ] = raw_mut !( VAR ) as _;
458
+ st. x[ 12 ] = addr_of_mut !( VAR ) as _;
459
459
st. x[ 6 ] = VAR_SEXT ;
460
460
} ) ;
461
461
exec ! ( "la x13, {VAR}; lr.w x6, (x13)" , |st| {
462
- st. x[ 13 ] = raw_mut !( VAR ) as _;
462
+ st. x[ 13 ] = addr_of_mut !( VAR ) as _;
463
463
st. x[ 6 ] = VAR_SEXT ;
464
464
} ) ;
465
465
exec ! ( "la x14, {VAR}; lr.w x6, (x14)" , |st| {
466
- st. x[ 14 ] = raw_mut !( VAR ) as _;
466
+ st. x[ 14 ] = addr_of_mut !( VAR ) as _;
467
467
st. x[ 6 ] = VAR_SEXT ;
468
468
} ) ;
469
469
exec ! ( "la x15, {VAR}; lr.w x6, (x15)" , |st| {
470
- st. x[ 15 ] = raw_mut !( VAR ) as _;
470
+ st. x[ 15 ] = addr_of_mut !( VAR ) as _;
471
471
st. x[ 6 ] = VAR_SEXT ;
472
472
} ) ;
473
473
exec ! ( "la x16, {VAR}; lr.w x6, (x16)" , |st| {
474
- st. x[ 16 ] = raw_mut !( VAR ) as _;
474
+ st. x[ 16 ] = addr_of_mut !( VAR ) as _;
475
475
st. x[ 6 ] = VAR_SEXT ;
476
476
} ) ;
477
477
exec ! ( "la x17, {VAR}; lr.w x6, (x17)" , |st| {
478
- st. x[ 17 ] = raw_mut !( VAR ) as _;
478
+ st. x[ 17 ] = addr_of_mut !( VAR ) as _;
479
479
st. x[ 6 ] = VAR_SEXT ;
480
480
} ) ;
481
481
exec ! ( "la x18, {VAR}; lr.w x6, (x18)" , |st| {
482
- st. x[ 18 ] = raw_mut !( VAR ) as _;
482
+ st. x[ 18 ] = addr_of_mut !( VAR ) as _;
483
483
st. x[ 6 ] = VAR_SEXT ;
484
484
} ) ;
485
485
exec ! ( "la x19, {VAR}; lr.w x6, (x19)" , |st| {
486
- st. x[ 19 ] = raw_mut !( VAR ) as _;
486
+ st. x[ 19 ] = addr_of_mut !( VAR ) as _;
487
487
st. x[ 6 ] = VAR_SEXT ;
488
488
} ) ;
489
489
exec ! ( "la x20, {VAR}; lr.w x6, (x20)" , |st| {
490
- st. x[ 20 ] = raw_mut !( VAR ) as _;
490
+ st. x[ 20 ] = addr_of_mut !( VAR ) as _;
491
491
st. x[ 6 ] = VAR_SEXT ;
492
492
} ) ;
493
493
exec ! ( "la x21, {VAR}; lr.w x6, (x21)" , |st| {
494
- st. x[ 21 ] = raw_mut !( VAR ) as _;
494
+ st. x[ 21 ] = addr_of_mut !( VAR ) as _;
495
495
st. x[ 6 ] = VAR_SEXT ;
496
496
} ) ;
497
497
exec ! ( "la x22, {VAR}; lr.w x6, (x22)" , |st| {
498
- st. x[ 22 ] = raw_mut !( VAR ) as _;
498
+ st. x[ 22 ] = addr_of_mut !( VAR ) as _;
499
499
st. x[ 6 ] = VAR_SEXT ;
500
500
} ) ;
501
501
exec ! ( "la x23, {VAR}; lr.w x6, (x23)" , |st| {
502
- st. x[ 23 ] = raw_mut !( VAR ) as _;
502
+ st. x[ 23 ] = addr_of_mut !( VAR ) as _;
503
503
st. x[ 6 ] = VAR_SEXT ;
504
504
} ) ;
505
505
exec ! ( "la x24, {VAR}; lr.w x6, (x24)" , |st| {
506
- st. x[ 24 ] = raw_mut !( VAR ) as _;
506
+ st. x[ 24 ] = addr_of_mut !( VAR ) as _;
507
507
st. x[ 6 ] = VAR_SEXT ;
508
508
} ) ;
509
509
exec ! ( "la x25, {VAR}; lr.w x6, (x25)" , |st| {
510
- st. x[ 25 ] = raw_mut !( VAR ) as _;
510
+ st. x[ 25 ] = addr_of_mut !( VAR ) as _;
511
511
st. x[ 6 ] = VAR_SEXT ;
512
512
} ) ;
513
513
exec ! ( "la x26, {VAR}; lr.w x6, (x26)" , |st| {
514
- st. x[ 26 ] = raw_mut !( VAR ) as _;
514
+ st. x[ 26 ] = addr_of_mut !( VAR ) as _;
515
515
st. x[ 6 ] = VAR_SEXT ;
516
516
} ) ;
517
517
exec ! ( "la x27, {VAR}; lr.w x6, (x27)" , |st| {
518
- st. x[ 27 ] = raw_mut !( VAR ) as _;
518
+ st. x[ 27 ] = addr_of_mut !( VAR ) as _;
519
519
st. x[ 6 ] = VAR_SEXT ;
520
520
} ) ;
521
521
exec ! ( "la x28, {VAR}; lr.w x6, (x28)" , |st| {
522
- st. x[ 28 ] = raw_mut !( VAR ) as _;
522
+ st. x[ 28 ] = addr_of_mut !( VAR ) as _;
523
523
st. x[ 6 ] = VAR_SEXT ;
524
524
} ) ;
525
525
exec ! ( "la x29, {VAR}; lr.w x6, (x29)" , |st| {
526
- st. x[ 29 ] = raw_mut !( VAR ) as _;
526
+ st. x[ 29 ] = addr_of_mut !( VAR ) as _;
527
527
st. x[ 6 ] = VAR_SEXT ;
528
528
} ) ;
529
529
exec ! ( "la x30, {VAR}; lr.w x6, (x30)" , |st| {
530
- st. x[ 30 ] = raw_mut !( VAR ) as _;
530
+ st. x[ 30 ] = addr_of_mut !( VAR ) as _;
531
531
st. x[ 6 ] = VAR_SEXT ;
532
532
} ) ;
533
533
exec ! ( "la x31, {VAR}; lr.w x6, (x31)" , |st| {
534
- st. x[ 31 ] = raw_mut !( VAR ) as _;
534
+ st. x[ 31 ] = addr_of_mut !( VAR ) as _;
535
535
st. x[ 6 ] = VAR_SEXT ;
536
536
} ) ;
537
537
@@ -543,7 +543,7 @@ unsafe fn do_test<System: Kernel>() {
543
543
addi x6, x6, 1
544
544
sc.w x8, x6, (x7)" ,
545
545
|st| {
546
- st. x[ 7 ] = raw_mut !( VAR ) as _;
546
+ st. x[ 7 ] = addr_of_mut !( VAR ) as _;
547
547
st. x[ 6 ] = VAR_SEXT . wrapping_add( 1 ) ;
548
548
st. x[ 8 ] = 0 as _; // success
549
549
}
@@ -557,7 +557,7 @@ unsafe fn do_test<System: Kernel>() {
557
557
sc.w x8, x0, (x7)
558
558
snez x8, x8" ,
559
559
|st| {
560
- st. x[ 7 ] = raw_mut !( VAR ) as _;
560
+ st. x[ 7 ] = addr_of_mut !( VAR ) as _;
561
561
st. x[ 6 ] = VAR_SEXT ;
562
562
st. x[ 8 ] = 1 as _; // non-zero result value, meaning failure
563
563
}
@@ -570,7 +570,7 @@ unsafe fn do_test<System: Kernel>() {
570
570
sc.w x8, x6, (x7)
571
571
snez x8, x8" ,
572
572
|st| {
573
- st. x[ 7 ] = raw_mut !( VAR ) as _;
573
+ st. x[ 7 ] = addr_of_mut !( VAR ) as _;
574
574
st. x[ 6 ] = VAR_SEXT ;
575
575
st. x[ 8 ] = 1 as _; // non-zero result value, meaning failure
576
576
}
0 commit comments