7043 %{
7044 match(Set dst (CastX2P src));
7045
7046 format %{ "movq $dst, $src\t# long->ptr" %}
7047 ins_encode(enc_copy_wide(dst, src));
7048 ins_pipe(ialu_reg_reg); // XXX
7049 %}
7050
7051 instruct castP2X(rRegL dst, rRegP src)
7052 %{
7053 match(Set dst (CastP2X src));
7054
7055 format %{ "movq $dst, $src\t# ptr -> long" %}
7056 ins_encode(enc_copy_wide(dst, src));
7057 ins_pipe(ialu_reg_reg); // XXX
7058 %}
7059
7060
7061 // Convert oop pointer into compressed form
7062 instruct encodeHeapOop(rRegN dst, rRegP src, rFlagsReg cr) %{
7063 predicate(n->bottom_type()->is_narrowoop()->make_oopptr()->ptr() != TypePtr::NotNull);
7064 match(Set dst (EncodeP src));
7065 effect(KILL cr);
7066 format %{ "encode_heap_oop $dst,$src" %}
7067 ins_encode %{
7068 Register s = $src$$Register;
7069 Register d = $dst$$Register;
7070 if (s != d) {
7071 __ movq(d, s);
7072 }
7073 __ encode_heap_oop(d);
7074 %}
7075 ins_pipe(ialu_reg_long);
7076 %}
7077
7078 instruct encodeHeapOop_not_null(rRegN dst, rRegP src, rFlagsReg cr) %{
7079 predicate(n->bottom_type()->is_narrowoop()->make_oopptr()->ptr() == TypePtr::NotNull);
7080 match(Set dst (EncodeP src));
7081 effect(KILL cr);
7082 format %{ "encode_heap_oop_not_null $dst,$src" %}
7083 ins_encode %{
7084 Register s = $src$$Register;
7085 Register d = $dst$$Register;
7086 __ encode_heap_oop_not_null(d, s);
7087 %}
7088 ins_pipe(ialu_reg_long);
7089 %}
7090
7091 instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{
7092 predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull &&
7093 n->bottom_type()->is_oopptr()->ptr() != TypePtr::Constant);
7094 match(Set dst (DecodeN src));
7095 effect(KILL cr);
7096 format %{ "decode_heap_oop $dst,$src" %}
7097 ins_encode %{
7098 Register s = $src$$Register;
7099 Register d = $dst$$Register;
|
7043 %{
7044 match(Set dst (CastX2P src));
7045
7046 format %{ "movq $dst, $src\t# long->ptr" %}
7047 ins_encode(enc_copy_wide(dst, src));
7048 ins_pipe(ialu_reg_reg); // XXX
7049 %}
7050
7051 instruct castP2X(rRegL dst, rRegP src)
7052 %{
7053 match(Set dst (CastP2X src));
7054
7055 format %{ "movq $dst, $src\t# ptr -> long" %}
7056 ins_encode(enc_copy_wide(dst, src));
7057 ins_pipe(ialu_reg_reg); // XXX
7058 %}
7059
7060
7061 // Convert oop pointer into compressed form
7062 instruct encodeHeapOop(rRegN dst, rRegP src, rFlagsReg cr) %{
7063 predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull);
7064 match(Set dst (EncodeP src));
7065 effect(KILL cr);
7066 format %{ "encode_heap_oop $dst,$src" %}
7067 ins_encode %{
7068 Register s = $src$$Register;
7069 Register d = $dst$$Register;
7070 if (s != d) {
7071 __ movq(d, s);
7072 }
7073 __ encode_heap_oop(d);
7074 %}
7075 ins_pipe(ialu_reg_long);
7076 %}
7077
7078 instruct encodeHeapOop_not_null(rRegN dst, rRegP src, rFlagsReg cr) %{
7079 predicate(n->bottom_type()->make_ptr()->ptr() == TypePtr::NotNull);
7080 match(Set dst (EncodeP src));
7081 effect(KILL cr);
7082 format %{ "encode_heap_oop_not_null $dst,$src" %}
7083 ins_encode %{
7084 Register s = $src$$Register;
7085 Register d = $dst$$Register;
7086 __ encode_heap_oop_not_null(d, s);
7087 %}
7088 ins_pipe(ialu_reg_long);
7089 %}
7090
7091 instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{
7092 predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull &&
7093 n->bottom_type()->is_oopptr()->ptr() != TypePtr::Constant);
7094 match(Set dst (DecodeN src));
7095 effect(KILL cr);
7096 format %{ "decode_heap_oop $dst,$src" %}
7097 ins_encode %{
7098 Register s = $src$$Register;
7099 Register d = $dst$$Register;
|