// Copyright (c) 2009 The Regents of The University of Michigan
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met: redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer;
// redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution;
// neither the name of the copyright holders nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

////////////////////////////////////////////////////////////////////
//
// Decode opcodes with the lock prefix. Opcodes which shouldn't have that
// prefix should effectively decode to UD2.
//

// All the memory references in these instructions happen through modrm bytes.
// We therefore only need to make sure the modrm byte encodes a memory
// reference to make sure these are the memory forms of these instructions.
0x1: decode MODRM_MOD {
    format Inst {
        0x3: UD2();
        default: decode OPCODE_TYPE {
            'X86ISA::OneByteOpcode': decode OPCODE_OP_TOP5 {
                0x00: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::ADD_LOCKED(OPCODE_OP_BOTTOM3,
                                            [Mb,Gb], [Mv,Gv]);
                }
                0x01: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::OR_LOCKED(OPCODE_OP_BOTTOM3,
                                           [Mb,Gb], [Mv,Gv]);
                }
                0x02: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::ADC_LOCKED(OPCODE_OP_BOTTOM3,
                                            [Mb,Gb], [Mv,Gv]);
                }
                0x03: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::SBB_LOCKED(OPCODE_OP_BOTTOM3,
                                            [Mb,Gb], [Mv,Gv]);
                }
                0x04: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::AND_LOCKED(OPCODE_OP_BOTTOM3,
                                            [Mb,Gb], [Mv,Gv]);
                }
                0x05: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::SUB_LOCKED(OPCODE_OP_BOTTOM3,
                                            [Mb,Gb], [Mv,Gv]);
                }
                0x06: decode OPCODE_OP_BOTTOM3 {
                    default: MultiInst::XOR_LOCKED(OPCODE_OP_BOTTOM3,
                                            [Mb,Gb], [Mv,Gv]);
                }
                0x10: decode OPCODE_OP_BOTTOM3 {
                    0x0: decode MODRM_REG {
                        0x0: ADD_LOCKED(Mb,Ib);
                        0x1: OR_LOCKED(Mb,Ib);
                        0x2: ADC_LOCKED(Mb,Ib);
                        0x3: SBB_LOCKED(Mb,Ib);
                        0x4: AND_LOCKED(Mb,Ib);
                        0x5: SUB_LOCKED(Mb,Ib);
                        0x6: XOR_LOCKED(Mb,Ib);
                    }
                    0x1: decode MODRM_REG {
                        0x0: ADD_LOCKED(Mv,Iz);
                        0x1: OR_LOCKED(Mv,Iz);
                        0x2: ADC_LOCKED(Mv,Iz);
                        0x3: SBB_LOCKED(Mv,Iz);
                        0x4: AND_LOCKED(Mv,Iz);
                        0x5: SUB_LOCKED(Mv,Iz);
                        0x6: XOR_LOCKED(Mv,Iz);
                    }
                    0x2: decode MODE_SUBMODE {
                        0x0: UD2();
                        default: decode MODRM_REG {
                            0x0: ADD_LOCKED(Mb,Ib);
                            0x1: OR_LOCKED(Mb,Ib);
                            0x2: ADC_LOCKED(Mb,Ib);
                            0x3: SBB_LOCKED(Mb,Ib);
                            0x4: AND_LOCKED(Mb,Ib);
                            0x5: SUB_LOCKED(Mb,Ib);
                            0x6: XOR_LOCKED(Mb,Ib);
                        }
                    }
                    //0x3: group1_Ev_Ib();
                    0x3: decode MODRM_REG {
                        0x0: ADD_LOCKED(Mv,Ib);
                        0x1: OR_LOCKED(Mv,Ib);
                        0x2: ADC_LOCKED(Mv,Ib);
                        0x3: SBB_LOCKED(Mv,Ib);
                        0x4: AND_LOCKED(Mv,Ib);
                        0x5: SUB_LOCKED(Mv,Ib);
                        0x6: XOR_LOCKED(Mv,Ib);
                    }
                    0x6: XCHG_LOCKED(Mb,Gb);
                    0x7: XCHG_LOCKED(Mv,Gv);
                }
                0x1E: decode OPCODE_OP_BOTTOM3 {
                    //0x6: group3_Eb();
                    0x6: decode MODRM_REG {
                        0x2: NOT_LOCKED(Mb);
                        0x3: NEG_LOCKED(Mb);
                    }
                    //0x7: group3_Ev();
                    0x7: decode MODRM_REG {
                        0x2: NOT_LOCKED(Mv);
                        0x3: NEG_LOCKED(Mv);
                    }
                }
                0x1F: decode OPCODE_OP_BOTTOM3 {
                    0x6: decode MODRM_REG {
                        0x0: INC_LOCKED(Mb);
                        0x1: DEC_LOCKED(Mb);
                        default: UD2();
                    }
                    //0x7: group5();
                    0x7: decode MODRM_REG {
                        0x0: INC_LOCKED(Mv);
                        0x1: DEC_LOCKED(Mv);
                    }
                }
            }
            'X86ISA::TwoByteOpcode': decode OPCODE_OP_TOP5 {
                0x04: decode OPCODE_OP_BOTTOM3 {
                    0x0: WarnUnimpl::mov_Rd_CR8D();
                    0x2: WarnUnimpl::mov_CR8D_Rd();
                }
                0x15: decode OPCODE_OP_BOTTOM3 {
                    0x3: BTS_LOCKED(Mv,Gv);
                }
                0x16: decode OPCODE_OP_BOTTOM3 {
                    0x0: CMPXCHG_LOCKED(Mb,Gb);
                    0x1: CMPXCHG_LOCKED(Mv,Gv);
                    0x3: BTR_LOCKED(Mv,Gv);
                }
                0x17: decode OPCODE_OP_BOTTOM3 {
                    0x2: decode MODRM_REG {
                        0x5: BTS_LOCKED(Mv,Ib);
                        0x6: BTR_LOCKED(Mv,Ib);
                        0x7: BTC_LOCKED(Mv,Ib);
                    }
                    0x3: BTC_LOCKED(Mv,Gv);
                }
                0x18: decode OPCODE_OP_BOTTOM3 {
                    0x0: XADD_LOCKED(Mb,Gb);
                    0x1: XADD_LOCKED(Mv,Gv);
                    //0x7: group9();
                    0x7: decode MODRM_REG {
                        //Also CMPXCHG16B
                        0x1: CMPXCHG8B_LOCKED(Mdp);
                    }
                }
            }
        }
    }
}
