Source file test/codegen/logic.go

     1  // asmcheck
     2  
     3  // Copyright 2018 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  package codegen
     8  
     9  // Test to make sure that (CMPQ (ANDQ x y) [0]) does not get rewritten to
    10  // (TESTQ x y) if the ANDQ has other uses. If that rewrite happens, then one
    11  // of the args of the ANDQ needs to be saved so it can be used as the arg to TESTQ.
    12  func andWithUse(x, y int) int {
    13  	z := x & y
    14  	// amd64:`TESTQ\s(AX, AX|BX, BX|CX, CX|DX, DX|SI, SI|DI, DI|R8, R8|R9, R9|R10, R10|R11, R11|R12, R12|R13, R13|R15, R15)`
    15  	if z == 0 {
    16  		return 77
    17  	}
    18  	// use z by returning it
    19  	return z
    20  }
    21  
    22  // Verify (OR x (NOT y)) rewrites to (ORN x y) where supported
    23  func ornot(x, y int) int {
    24  	// ppc64x:"ORN"
    25  	z := x | ^y
    26  	return z
    27  }
    28  
    29  // Verify that (OR (NOT x) (NOT y)) rewrites to (NOT (AND x y))
    30  func orDemorgans(x, y int) int {
    31  	// amd64:"AND",-"OR"
    32  	z := ^x | ^y
    33  	return z
    34  }
    35  
    36  // Verify that (AND (NOT x) (NOT y)) rewrites to (NOT (OR x y))
    37  func andDemorgans(x, y int) int {
    38  	// amd64:"OR",-"AND"
    39  	z := ^x & ^y
    40  	return z
    41  }
    42  

View as plain text