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