Cross Reference: Test6443505.java
xref
: /
openjdk7
/
hotspot
/
test
/
compiler
/
6443505
/
Test6443505.java
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
Test6443505.java revision 4449
0
N/A
/*
0
N/A
* Copyright (c) 2013, Oracle
and
/
or
its affiliates. All rights reserved.
0
N/A
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0
N/A
*
0
N/A
* This code is free software; you can redistribute it
and
/
or
modify it
0
N/A
* under the terms of the GNU General Public License version 2 only, as
0
N/A
* published by the Free Software Foundation.
0
N/A
*
0
N/A
* This code is distributed in the hope that it will be useful, but WITHOUT
0
N/A
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0
N/A
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0
N/A
* version 2 for more details (a copy is included in the LICENSE file that
0
N/A
* accompanied this code).
0
N/A
*
0
N/A
* You should have received a copy of the GNU General Public License version
0
N/A
* 2 along with this work; if not, write to the Free Software Foundation,
0
N/A
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0
N/A
*
0
N/A
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
0
N/A
* or visit www.oracle.com if you need additional information or have any
0
N/A
* questions.
0
N/A
*
0
N/A
*/
0
N/A
0
N/A
/**
0
N/A
*
@test
0
N/A
*
@bug
6443505
0
N/A
*
@summary
Some cases for CmpLTMask missed; also wrong code.
0
N/A
*
0
N/A
*
@run
main
/
othervm
-Xcomp -XX:CompileOnly="Test6443505.compiled" Test6443505
0
N/A
*/
0
N/A
0
N/A
public
class
Test6443505
{
0
N/A
0
N/A
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
0
N/A
test
(
Integer
.
MIN_VALUE
,
0
);
0
N/A
test
(
0
,
Integer
.
MIN_VALUE
);
0
N/A
test
(
Integer
.
MIN_VALUE
, -
1
);
0
N/A
test
(-
1
,
Integer
.
MIN_VALUE
);
0
N/A
test
(
Integer
.
MIN_VALUE
,
1
);
0
N/A
test
(
1
,
Integer
.
MIN_VALUE
);
0
N/A
0
N/A
test
(
Integer
.
MAX_VALUE
,
0
);
0
N/A
test
(
0
,
Integer
.
MAX_VALUE
);
0
N/A
test
(
Integer
.
MAX_VALUE
, -
1
);
0
N/A
test
(-
1
,
Integer
.
MAX_VALUE
);
0
N/A
test
(
Integer
.
MAX_VALUE
,
1
);
0
N/A
test
(
1
,
Integer
.
MAX_VALUE
);
0
N/A
0
N/A
test
(
Integer
.
MIN_VALUE
,
Integer
.
MAX_VALUE
);
0
N/A
test
(
Integer
.
MAX_VALUE
,
Integer
.
MIN_VALUE
);
0
N/A
0
N/A
test
(
1
, -
1
);
0
N/A
test
(
1
,
0
);
0
N/A
test
(
1
,
1
);
0
N/A
test
(-
1
, -
1
);
0
N/A
test
(-
1
,
0
);
0
N/A
test
(-
1
,
1
);
0
N/A
test
(
0
, -
1
);
0
N/A
test
(
0
,
0
);
0
N/A
test
(
0
,
1
);
0
N/A
}
0
N/A
0
N/A
public
static
void
test
(
int
a,
int
b)
throws
InterruptedException
{
0
N/A
int
C =
compiled
(
4
, a, b);
0
N/A
int
I =
interpreted
(
4
, a, b);
0
N/A
if
(C != I) {
0
N/A
System
.
err
.
println
(
"#1 C = "
+ C +
", I = "
+ I);
0
N/A
System
.
err
.
println
(
"#1 C != I, FAIL"
);
0
N/A
System
.
exit
(
97
);
0
N/A
}
0
N/A
0
N/A
C =
compiled
(a, b, q,
4
);
0
N/A
I =
interpreted
(a, b, q,
4
);
0
N/A
if
(C != I) {
0
N/A
System
.
err
.
println
(
"#2 C = "
+ C +
", I = "
+ I);
0
N/A
System
.
err
.
println
(
"#2 C != I, FAIL"
);
0
N/A
System
.
exit
(
97
);
0
N/A
}
0
N/A
0
N/A
}
0
N/A
0
N/A
static
int
q =
4
;
0
N/A
0
N/A
// If improperly compiled, uses
carry
/
borrow
bit, which is wrong.
0
N/A
// with -XX:+PrintOptoAssembly, look for cadd_cmpLTMask
0
N/A
static
int
compiled
(
int
p,
int
x,
int
y) {
0
N/A
return
(x < y) ? q + (x - y) : (x - y);
0
N/A
}
0
N/A
0
N/A
// interpreted reference
0
N/A
static
int
interpreted
(
int
p,
int
x,
int
y) {
return
(x < y) ? q + (x - y) : (x - y);
}
// Test new code with a range of cases
// with -XX:+PrintOptoAssembly, look for and_cmpLTMask
static
int
compiled
(
int
x,
int
y,
int
q,
int
p) {
return
(x < y) ? p + q : q;
}
// interpreted reference
static
int
interpreted
(
int
x,
int
y,
int
q,
int
p) {
return
(x < y) ? p + q : q;
}
}