]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/arm64/ssa.go
[dev.regabi] all: merge master (dab3e5a) into dev.regabi
[gostls13.git] / src / cmd / compile / internal / arm64 / ssa.go
index 8d25fa8592d715c94f3d0bbf5e463adc3871212a..73e74e12199b5ecdf0be97d91dc85a5c05c9b37f 100644 (file)
@@ -1056,7 +1056,11 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
                ssa.OpARM64LessThanF,
                ssa.OpARM64LessEqualF,
                ssa.OpARM64GreaterThanF,
-               ssa.OpARM64GreaterEqualF:
+               ssa.OpARM64GreaterEqualF,
+               ssa.OpARM64NotLessThanF,
+               ssa.OpARM64NotLessEqualF,
+               ssa.OpARM64NotGreaterThanF,
+               ssa.OpARM64NotGreaterEqualF:
                // generate boolean values using CSET
                p := s.Prog(arm64.ACSET)
                p.From.Type = obj.TYPE_REG // assembler encodes conditional bits in Reg
@@ -1100,10 +1104,16 @@ var condBits = map[ssa.Op]int16{
        ssa.OpARM64GreaterThanU:  arm64.COND_HI,
        ssa.OpARM64GreaterEqual:  arm64.COND_GE,
        ssa.OpARM64GreaterEqualU: arm64.COND_HS,
-       ssa.OpARM64LessThanF:     arm64.COND_MI,
-       ssa.OpARM64LessEqualF:    arm64.COND_LS,
-       ssa.OpARM64GreaterThanF:  arm64.COND_GT,
-       ssa.OpARM64GreaterEqualF: arm64.COND_GE,
+       ssa.OpARM64LessThanF:     arm64.COND_MI, // Less than
+       ssa.OpARM64LessEqualF:    arm64.COND_LS, // Less than or equal to
+       ssa.OpARM64GreaterThanF:  arm64.COND_GT, // Greater than
+       ssa.OpARM64GreaterEqualF: arm64.COND_GE, // Greater than or equal to
+
+       // The following condition codes have unordered to handle comparisons related to NaN.
+       ssa.OpARM64NotLessThanF:     arm64.COND_PL, // Greater than, equal to, or unordered
+       ssa.OpARM64NotLessEqualF:    arm64.COND_HI, // Greater than or unordered
+       ssa.OpARM64NotGreaterThanF:  arm64.COND_LE, // Less than, equal to or unordered
+       ssa.OpARM64NotGreaterEqualF: arm64.COND_LT, // Less than or unordered
 }
 
 var blockJump = map[ssa.BlockKind]struct {