decoder.isa (4027:53292b42ee1c) decoder.isa (4036:bd6473d8fe70)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2003-2006 The Regents of The University of Michigan
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met: redistributions of source code must retain the above copyright

--- 70 unchanged lines hidden (view full) ---

79 }
80
81 format StoreCond {
82 0x2e: stl_c({{ Mem.ul = Ra<31:0>; }},
83 {{
84 uint64_t tmp = write_result;
85 // see stq_c
86 Ra = (tmp == 0 || tmp == 1) ? tmp : Ra;
1// -*- mode:c++ -*-
2
3// Copyright (c) 2003-2006 The Regents of The University of Michigan
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met: redistributions of source code must retain the above copyright

--- 70 unchanged lines hidden (view full) ---

79 }
80
81 format StoreCond {
82 0x2e: stl_c({{ Mem.ul = Ra<31:0>; }},
83 {{
84 uint64_t tmp = write_result;
85 // see stq_c
86 Ra = (tmp == 0 || tmp == 1) ? tmp : Ra;
87 if (tmp == 1) {
88 xc->setStCondFailures(0);
89 }
90 }}, mem_flags = LOCKED, inst_flags = IsStoreConditional);
91 0x2f: stq_c({{ Mem.uq = Ra; }},
92 {{
93 uint64_t tmp = write_result;
94 // If the write operation returns 0 or 1, then
95 // this was a conventional store conditional,
96 // and the value indicates the success/failure
97 // of the operation. If another value is
98 // returned, then this was a Turbolaser
99 // mailbox access, and we don't update the
100 // result register at all.
101 Ra = (tmp == 0 || tmp == 1) ? tmp : Ra;
87 }}, mem_flags = LOCKED, inst_flags = IsStoreConditional);
88 0x2f: stq_c({{ Mem.uq = Ra; }},
89 {{
90 uint64_t tmp = write_result;
91 // If the write operation returns 0 or 1, then
92 // this was a conventional store conditional,
93 // and the value indicates the success/failure
94 // of the operation. If another value is
95 // returned, then this was a Turbolaser
96 // mailbox access, and we don't update the
97 // result register at all.
98 Ra = (tmp == 0 || tmp == 1) ? tmp : Ra;
102 if (tmp == 1) {
103 // clear failure counter... this is
104 // non-architectural and for debugging
105 // only.
106 xc->setStCondFailures(0);
107 }
108 }}, mem_flags = LOCKED, inst_flags = IsStoreConditional);
109 }
110
111 format IntegerOperate {
112
113 0x10: decode INTFUNC { // integer arithmetic operations
114
115 0x00: addl({{ Rc.sl = Ra.sl + Rb_or_imm.sl; }});

--- 607 unchanged lines hidden (view full) ---

723 }
724#endif
725
726#if FULL_SYSTEM
727 0x1b: decode PALMODE {
728 0: OpcdecFault::hw_st_quad();
729 1: decode HW_LDST_QUAD {
730 format HwLoad {
99 }}, mem_flags = LOCKED, inst_flags = IsStoreConditional);
100 }
101
102 format IntegerOperate {
103
104 0x10: decode INTFUNC { // integer arithmetic operations
105
106 0x00: addl({{ Rc.sl = Ra.sl + Rb_or_imm.sl; }});

--- 607 unchanged lines hidden (view full) ---

714 }
715#endif
716
717#if FULL_SYSTEM
718 0x1b: decode PALMODE {
719 0: OpcdecFault::hw_st_quad();
720 1: decode HW_LDST_QUAD {
721 format HwLoad {
731 0: hw_ld({{ EA = (Rb + disp) & ~3; }}, {{ Ra = Mem.ul; }}, L);
732 1: hw_ld({{ EA = (Rb + disp) & ~7; }}, {{ Ra = Mem.uq; }}, Q);
722 0: hw_ld({{ EA = (Rb + disp) & ~3; }}, {{ Ra = Mem.ul; }},
723 L, IsSerializing, IsSerializeBefore);
724 1: hw_ld({{ EA = (Rb + disp) & ~7; }}, {{ Ra = Mem.uq; }},
725 Q, IsSerializing, IsSerializeBefore);
733 }
734 }
735 }
736
737 0x1f: decode PALMODE {
738 0: OpcdecFault::hw_st_cond();
739 format HwStore {
740 1: decode HW_LDST_COND {
741 0: decode HW_LDST_QUAD {
742 0: hw_st({{ EA = (Rb + disp) & ~3; }},
726 }
727 }
728 }
729
730 0x1f: decode PALMODE {
731 0: OpcdecFault::hw_st_cond();
732 format HwStore {
733 1: decode HW_LDST_COND {
734 0: decode HW_LDST_QUAD {
735 0: hw_st({{ EA = (Rb + disp) & ~3; }},
743 {{ Mem.ul = Ra<31:0>; }}, L);
736 {{ Mem.ul = Ra<31:0>; }}, L, IsSerializing, IsSerializeBefore);
744 1: hw_st({{ EA = (Rb + disp) & ~7; }},
737 1: hw_st({{ EA = (Rb + disp) & ~7; }},
745 {{ Mem.uq = Ra.uq; }}, Q);
738 {{ Mem.uq = Ra.uq; }}, Q, IsSerializing, IsSerializeBefore);
746 }
747
748 1: FailUnimpl::hw_st_cond();
749 }
750 }
751 }
752
753 0x19: decode PALMODE {

--- 106 unchanged lines hidden ---
739 }
740
741 1: FailUnimpl::hw_st_cond();
742 }
743 }
744 }
745
746 0x19: decode PALMODE {

--- 106 unchanged lines hidden ---