src/cpu/sparc/vm/sparc.ad
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hs-comp-convi2l Cdiff src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
Print this page
*** 3396,3405 ****
--- 3396,3416 ----
op_cost(0);
format %{ %}
interface(CONST_INTER);
%}
+ // Int Immediate positive
+ operand immU32()
+ %{
+ predicate(n->get_int() >= 0);
+ match(ConI);
+
+ op_cost(0);
+ format %{ %}
+ interface(CONST_INTER);
+ %}
+
// Integer Immediate: 0-bit
operand immI0() %{
predicate(n->get_int() == 0);
match(ConI);
op_cost(0);
*** 5845,5877 ****
__ lduh($mem$$Address, $dst$$Register, 2); // LSW is index+2 on BE
%}
ins_pipe(iload_mem);
%}
! // Load Integer with a 13-bit mask into a Long Register
! instruct loadI2L_immI13(iRegL dst, memory mem, immI13 mask) %{
match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
ins_cost(MEMORY_REF_COST + DEFAULT_COST);
size(2*4);
! format %{ "LDUW $mem,$dst\t! int & 13-bit mask -> long\n\t"
"AND $dst,$mask,$dst" %}
ins_encode %{
Register Rdst = $dst$$Register;
__ lduw($mem$$Address, Rdst);
__ and3(Rdst, $mask$$constant, Rdst);
%}
ins_pipe(iload_mem);
%}
! // Load Integer with a 32-bit mask into a Long Register
! instruct loadI2L_immI(iRegL dst, memory mem, immI mask, iRegL tmp) %{
match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
effect(TEMP dst, TEMP tmp);
ins_cost(MEMORY_REF_COST + 2*DEFAULT_COST);
! format %{ "LDUW $mem,$dst\t! int & 32-bit mask -> long\n\t"
"SET $mask,$tmp\n\t"
"AND $dst,$tmp,$dst" %}
ins_encode %{
Register Rdst = $dst$$Register;
Register Rtmp = $tmp$$Register;
--- 5856,5888 ----
__ lduh($mem$$Address, $dst$$Register, 2); // LSW is index+2 on BE
%}
ins_pipe(iload_mem);
%}
! // Load Integer with a 12-bit mask into a Long Register
! instruct loadI2L_immU13(iRegL dst, memory mem, immU13 mask) %{
match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
ins_cost(MEMORY_REF_COST + DEFAULT_COST);
size(2*4);
! format %{ "LDUW $mem,$dst\t! int & 12-bit mask -> long\n\t"
"AND $dst,$mask,$dst" %}
ins_encode %{
Register Rdst = $dst$$Register;
__ lduw($mem$$Address, Rdst);
__ and3(Rdst, $mask$$constant, Rdst);
%}
ins_pipe(iload_mem);
%}
! // Load Integer with a 31-bit mask into a Long Register
! instruct loadI2L_immU32(iRegL dst, memory mem, immU32 mask, iRegL tmp) %{
match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
effect(TEMP dst, TEMP tmp);
ins_cost(MEMORY_REF_COST + 2*DEFAULT_COST);
! format %{ "LDUW $mem,$dst\t! int & 31-bit mask -> long\n\t"
"SET $mask,$tmp\n\t"
"AND $dst,$tmp,$dst" %}
ins_encode %{
Register Rdst = $dst$$Register;
Register Rtmp = $tmp$$Register;
src/cpu/sparc/vm/sparc.ad
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File