@@ -615,60 +615,216 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
615
615
"atomic_umax_relaxed" =>
616
616
this. atomic_op_min_max ( args, dest, AtomicOp :: Max , AtomicRwOp :: Relaxed ) ?,
617
617
618
- "atomic_or" => this. atomic_op ( args, dest, BinOp :: BitOr , false , AtomicRwOp :: SeqCst ) ?,
619
- "atomic_or_acq" =>
620
- this. atomic_op ( args, dest, BinOp :: BitOr , false , AtomicRwOp :: Acquire ) ?,
621
- "atomic_or_rel" =>
622
- this. atomic_op ( args, dest, BinOp :: BitOr , false , AtomicRwOp :: Release ) ?,
623
- "atomic_or_acqrel" =>
624
- this. atomic_op ( args, dest, BinOp :: BitOr , false , AtomicRwOp :: AcqRel ) ?,
625
- "atomic_or_relaxed" =>
626
- this. atomic_op ( args, dest, BinOp :: BitOr , false , AtomicRwOp :: Relaxed ) ?,
627
- "atomic_xor" => this. atomic_op ( args, dest, BinOp :: BitXor , false , AtomicRwOp :: SeqCst ) ?,
628
- "atomic_xor_acq" =>
629
- this. atomic_op ( args, dest, BinOp :: BitXor , false , AtomicRwOp :: Acquire ) ?,
630
- "atomic_xor_rel" =>
631
- this. atomic_op ( args, dest, BinOp :: BitXor , false , AtomicRwOp :: Release ) ?,
632
- "atomic_xor_acqrel" =>
633
- this. atomic_op ( args, dest, BinOp :: BitXor , false , AtomicRwOp :: AcqRel ) ?,
634
- "atomic_xor_relaxed" =>
635
- this. atomic_op ( args, dest, BinOp :: BitXor , false , AtomicRwOp :: Relaxed ) ?,
636
- "atomic_and" => this. atomic_op ( args, dest, BinOp :: BitAnd , false , AtomicRwOp :: SeqCst ) ?,
637
- "atomic_and_acq" =>
638
- this. atomic_op ( args, dest, BinOp :: BitAnd , false , AtomicRwOp :: Acquire ) ?,
639
- "atomic_and_rel" =>
640
- this. atomic_op ( args, dest, BinOp :: BitAnd , false , AtomicRwOp :: Release ) ?,
641
- "atomic_and_acqrel" =>
642
- this. atomic_op ( args, dest, BinOp :: BitAnd , false , AtomicRwOp :: AcqRel ) ?,
643
- "atomic_and_relaxed" =>
644
- this. atomic_op ( args, dest, BinOp :: BitAnd , false , AtomicRwOp :: Relaxed ) ?,
645
- "atomic_nand" => this. atomic_op ( args, dest, BinOp :: BitAnd , true , AtomicRwOp :: SeqCst ) ?,
646
- "atomic_nand_acq" =>
647
- this. atomic_op ( args, dest, BinOp :: BitAnd , true , AtomicRwOp :: Acquire ) ?,
648
- "atomic_nand_rel" =>
649
- this. atomic_op ( args, dest, BinOp :: BitAnd , true , AtomicRwOp :: Release ) ?,
650
- "atomic_nand_acqrel" =>
651
- this. atomic_op ( args, dest, BinOp :: BitAnd , true , AtomicRwOp :: AcqRel ) ?,
652
- "atomic_nand_relaxed" =>
653
- this. atomic_op ( args, dest, BinOp :: BitAnd , true , AtomicRwOp :: Relaxed ) ?,
654
- "atomic_xadd" => this. atomic_op ( args, dest, BinOp :: Add , false , AtomicRwOp :: SeqCst ) ?,
655
- "atomic_xadd_acq" =>
656
- this. atomic_op ( args, dest, BinOp :: Add , false , AtomicRwOp :: Acquire ) ?,
657
- "atomic_xadd_rel" =>
658
- this. atomic_op ( args, dest, BinOp :: Add , false , AtomicRwOp :: Release ) ?,
659
- "atomic_xadd_acqrel" =>
660
- this. atomic_op ( args, dest, BinOp :: Add , false , AtomicRwOp :: AcqRel ) ?,
661
- "atomic_xadd_relaxed" =>
662
- this. atomic_op ( args, dest, BinOp :: Add , false , AtomicRwOp :: Relaxed ) ?,
663
- "atomic_xsub" => this. atomic_op ( args, dest, BinOp :: Sub , false , AtomicRwOp :: SeqCst ) ?,
664
- "atomic_xsub_acq" =>
665
- this. atomic_op ( args, dest, BinOp :: Sub , false , AtomicRwOp :: Acquire ) ?,
666
- "atomic_xsub_rel" =>
667
- this. atomic_op ( args, dest, BinOp :: Sub , false , AtomicRwOp :: Release ) ?,
668
- "atomic_xsub_acqrel" =>
669
- this. atomic_op ( args, dest, BinOp :: Sub , false , AtomicRwOp :: AcqRel ) ?,
670
- "atomic_xsub_relaxed" =>
671
- this. atomic_op ( args, dest, BinOp :: Sub , false , AtomicRwOp :: Relaxed ) ?,
618
+ "atomic_or" => this. atomic_op_min_max (
619
+ args,
620
+ dest,
621
+ AtomicOp :: MirOp ( BinOp :: BitOr ) ,
622
+ false ,
623
+ AtomicRwOp :: SeqCst ,
624
+ ) ?,
625
+ "atomic_or_acq" => this. atomic_op_min_max (
626
+ args,
627
+ dest,
628
+ AtomicOp :: MirOp ( BinOp :: BitOr ) ,
629
+ false ,
630
+ AtomicRwOp :: Acquire ,
631
+ ) ?,
632
+ "atomic_or_rel" => this. atomic_op_min_max (
633
+ args,
634
+ dest,
635
+ AtomicOp :: MirOp ( BinOp :: BitOr ) ,
636
+ false ,
637
+ AtomicRwOp :: Release ,
638
+ ) ?,
639
+ "atomic_or_acqrel" => this. atomic_op_min_max (
640
+ args,
641
+ dest,
642
+ AtomicOp :: MirOp ( BinOp :: BitOr ) ,
643
+ false ,
644
+ AtomicRwOp :: AcqRel ,
645
+ ) ?,
646
+ "atomic_or_relaxed" => this. atomic_op_min_max (
647
+ args,
648
+ dest,
649
+ AtomicOp :: MirOp ( BinOp :: BitOr ) ,
650
+ false ,
651
+ AtomicRwOp :: Relaxed ,
652
+ ) ?,
653
+ "atomic_xor" => this. atomic_op_min_max (
654
+ args,
655
+ dest,
656
+ AtomicOp :: MirOp ( BinOp :: BitXor ) ,
657
+ false ,
658
+ AtomicRwOp :: SeqCst ,
659
+ ) ?,
660
+ "atomic_xor_acq" => this. atomic_op_min_max (
661
+ args,
662
+ dest,
663
+ AtomicOp :: MirOp ( BinOp :: BitXor ) ,
664
+ false ,
665
+ AtomicRwOp :: Acquire ,
666
+ ) ?,
667
+ "atomic_xor_rel" => this. atomic_op_min_max (
668
+ args,
669
+ dest,
670
+ AtomicOp :: MirOp ( BinOp :: BitXor ) ,
671
+ false ,
672
+ AtomicRwOp :: Release ,
673
+ ) ?,
674
+ "atomic_xor_acqrel" => this. atomic_op_min_max (
675
+ args,
676
+ dest,
677
+ AtomicOp :: MirOp ( BinOp :: BitXor ) ,
678
+ false ,
679
+ AtomicRwOp :: AcqRel ,
680
+ ) ?,
681
+ "atomic_xor_relaxed" => this. atomic_op_min_max (
682
+ args,
683
+ dest,
684
+ AtomicOp :: MirOp ( BinOp :: BitXor ) ,
685
+ false ,
686
+ AtomicRwOp :: Relaxed ,
687
+ ) ?,
688
+ "atomic_and" => this. atomic_op_min_max (
689
+ args,
690
+ dest,
691
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
692
+ false ,
693
+ AtomicRwOp :: SeqCst ,
694
+ ) ?,
695
+ "atomic_and_acq" => this. atomic_op_min_max (
696
+ args,
697
+ dest,
698
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
699
+ false ,
700
+ AtomicRwOp :: Acquire ,
701
+ ) ?,
702
+ "atomic_and_rel" => this. atomic_op_min_max (
703
+ args,
704
+ dest,
705
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
706
+ false ,
707
+ AtomicRwOp :: Release ,
708
+ ) ?,
709
+ "atomic_and_acqrel" => this. atomic_op_min_max (
710
+ args,
711
+ dest,
712
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
713
+ false ,
714
+ AtomicRwOp :: AcqRel ,
715
+ ) ?,
716
+ "atomic_and_relaxed" => this. atomic_op_min_max (
717
+ args,
718
+ dest,
719
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
720
+ false ,
721
+ AtomicRwOp :: Relaxed ,
722
+ ) ?,
723
+ "atomic_nand" => this. atomic_op_min_max (
724
+ args,
725
+ dest,
726
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
727
+ true ,
728
+ AtomicRwOp :: SeqCst ,
729
+ ) ?,
730
+ "atomic_nand_acq" => this. atomic_op_min_max (
731
+ args,
732
+ dest,
733
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
734
+ true ,
735
+ AtomicRwOp :: Acquire ,
736
+ ) ?,
737
+ "atomic_nand_rel" => this. atomic_op_min_max (
738
+ args,
739
+ dest,
740
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
741
+ true ,
742
+ AtomicRwOp :: Release ,
743
+ ) ?,
744
+ "atomic_nand_acqrel" => this. atomic_op_min_max (
745
+ args,
746
+ dest,
747
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
748
+ true ,
749
+ AtomicRwOp :: AcqRel ,
750
+ ) ?,
751
+ "atomic_nand_relaxed" => this. atomic_op_min_max (
752
+ args,
753
+ dest,
754
+ AtomicOp :: MirOp ( BinOp :: BitAnd ) ,
755
+ true ,
756
+ AtomicRwOp :: Relaxed ,
757
+ ) ?,
758
+ "atomic_xadd" => this. atomic_op_min_max (
759
+ args,
760
+ dest,
761
+ AtomicOp :: MirOp ( BinOp :: Add ) ,
762
+ false ,
763
+ AtomicRwOp :: SeqCst ,
764
+ ) ?,
765
+ "atomic_xadd_acq" => this. atomic_op_min_max (
766
+ args,
767
+ dest,
768
+ AtomicOp :: MirOp ( BinOp :: Add ) ,
769
+ false ,
770
+ AtomicRwOp :: Acquire ,
771
+ ) ?,
772
+ "atomic_xadd_rel" => this. atomic_op_min_max (
773
+ args,
774
+ dest,
775
+ AtomicOp :: MirOp ( BinOp :: Add ) ,
776
+ false ,
777
+ AtomicRwOp :: Release ,
778
+ ) ?,
779
+ "atomic_xadd_acqrel" => this. atomic_op_min_max (
780
+ args,
781
+ dest,
782
+ AtomicOp :: MirOp ( BinOp :: Add ) ,
783
+ false ,
784
+ AtomicRwOp :: AcqRel ,
785
+ ) ?,
786
+ "atomic_xadd_relaxed" => this. atomic_op_min_max (
787
+ args,
788
+ dest,
789
+ AtomicOp :: MirOp ( BinOp :: Add ) ,
790
+ false ,
791
+ AtomicRwOp :: Relaxed ,
792
+ ) ?,
793
+ "atomic_xsub" => this. atomic_op_min_max (
794
+ args,
795
+ dest,
796
+ AtomicOp :: MirOp ( BinOp :: Sub ) ,
797
+ false ,
798
+ AtomicRwOp :: SeqCst ,
799
+ ) ?,
800
+ "atomic_xsub_acq" => this. atomic_op_min_max (
801
+ args,
802
+ dest,
803
+ AtomicOp :: MirOp ( BinOp :: Sub ) ,
804
+ false ,
805
+ AtomicRwOp :: Acquire ,
806
+ ) ?,
807
+ "atomic_xsub_rel" => this. atomic_op_min_max (
808
+ args,
809
+ dest,
810
+ AtomicOp :: MirOp ( BinOp :: Sub ) ,
811
+ false ,
812
+ AtomicRwOp :: Release ,
813
+ ) ?,
814
+ "atomic_xsub_acqrel" => this. atomic_op_min_max (
815
+ args,
816
+ dest,
817
+ AtomicOp :: MirOp ( BinOp :: Sub ) ,
818
+ false ,
819
+ AtomicRwOp :: AcqRel ,
820
+ ) ?,
821
+ "atomic_xsub_relaxed" => this. atomic_op_min_max (
822
+ args,
823
+ dest,
824
+ AtomicOp :: MirOp ( BinOp :: Sub ) ,
825
+ false ,
826
+ AtomicRwOp :: Relaxed ,
827
+ ) ?,
672
828
673
829
// Query type information
674
830
"assert_zero_valid" | "assert_uninit_valid" => {
0 commit comments