Mercurial > hg > truffle
comparison src/share/vm/opto/library_call.cpp @ 1396:d7f654633cfe
6946040: add intrinsic for short and char reverseBytes
Reviewed-by: never, twisti
Contributed-by: Hiroshi Yamauchi <yamauchi@google.com>
author | never |
---|---|
date | Mon, 26 Apr 2010 11:27:21 -0700 |
parents | cd37471eaecc |
children | e8e83be27dd7 ae8f909e5fc7 |
comparison
equal
deleted
inserted
replaced
1385:bc32f286fae0 | 1396:d7f654633cfe |
---|---|
634 case vmIntrinsics::_bitCount_l: | 634 case vmIntrinsics::_bitCount_l: |
635 return inline_bitCount(intrinsic_id()); | 635 return inline_bitCount(intrinsic_id()); |
636 | 636 |
637 case vmIntrinsics::_reverseBytes_i: | 637 case vmIntrinsics::_reverseBytes_i: |
638 case vmIntrinsics::_reverseBytes_l: | 638 case vmIntrinsics::_reverseBytes_l: |
639 case vmIntrinsics::_reverseBytes_s: | |
640 case vmIntrinsics::_reverseBytes_c: | |
639 return inline_reverseBytes((vmIntrinsics::ID) intrinsic_id()); | 641 return inline_reverseBytes((vmIntrinsics::ID) intrinsic_id()); |
640 | 642 |
641 case vmIntrinsics::_get_AtomicLong: | 643 case vmIntrinsics::_get_AtomicLong: |
642 return inline_native_AtomicLong_get(); | 644 return inline_native_AtomicLong_get(); |
643 case vmIntrinsics::_attemptUpdate: | 645 case vmIntrinsics::_attemptUpdate: |
2008 ShouldNotReachHere(); | 2010 ShouldNotReachHere(); |
2009 } | 2011 } |
2010 return true; | 2012 return true; |
2011 } | 2013 } |
2012 | 2014 |
2013 //----------------------------inline_reverseBytes_int/long------------------- | 2015 //----------------------------inline_reverseBytes_int/long/char/short------------------- |
2014 // inline Integer.reverseBytes(int) | 2016 // inline Integer.reverseBytes(int) |
2015 // inline Long.reverseBytes(long) | 2017 // inline Long.reverseBytes(long) |
2018 // inline Character.reverseBytes(char) | |
2019 // inline Short.reverseBytes(short) | |
2016 bool LibraryCallKit::inline_reverseBytes(vmIntrinsics::ID id) { | 2020 bool LibraryCallKit::inline_reverseBytes(vmIntrinsics::ID id) { |
2017 assert(id == vmIntrinsics::_reverseBytes_i || id == vmIntrinsics::_reverseBytes_l, "not reverse Bytes"); | 2021 assert(id == vmIntrinsics::_reverseBytes_i || id == vmIntrinsics::_reverseBytes_l || |
2018 if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false; | 2022 id == vmIntrinsics::_reverseBytes_c || id == vmIntrinsics::_reverseBytes_s, |
2019 if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false; | 2023 "not reverse Bytes"); |
2024 if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false; | |
2025 if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false; | |
2026 if (id == vmIntrinsics::_reverseBytes_c && !Matcher::has_match_rule(Op_ReverseBytesUS)) return false; | |
2027 if (id == vmIntrinsics::_reverseBytes_s && !Matcher::has_match_rule(Op_ReverseBytesS)) return false; | |
2020 _sp += arg_size(); // restore stack pointer | 2028 _sp += arg_size(); // restore stack pointer |
2021 switch (id) { | 2029 switch (id) { |
2022 case vmIntrinsics::_reverseBytes_i: | 2030 case vmIntrinsics::_reverseBytes_i: |
2023 push(_gvn.transform(new (C, 2) ReverseBytesINode(0, pop()))); | 2031 push(_gvn.transform(new (C, 2) ReverseBytesINode(0, pop()))); |
2024 break; | 2032 break; |
2025 case vmIntrinsics::_reverseBytes_l: | 2033 case vmIntrinsics::_reverseBytes_l: |
2026 push_pair(_gvn.transform(new (C, 2) ReverseBytesLNode(0, pop_pair()))); | 2034 push_pair(_gvn.transform(new (C, 2) ReverseBytesLNode(0, pop_pair()))); |
2035 break; | |
2036 case vmIntrinsics::_reverseBytes_c: | |
2037 push(_gvn.transform(new (C, 2) ReverseBytesUSNode(0, pop()))); | |
2038 break; | |
2039 case vmIntrinsics::_reverseBytes_s: | |
2040 push(_gvn.transform(new (C, 2) ReverseBytesSNode(0, pop()))); | |
2027 break; | 2041 break; |
2028 default: | 2042 default: |
2029 ; | 2043 ; |
2030 } | 2044 } |
2031 return true; | 2045 return true; |