/* PCSX2 - PS2 Emulator for PCs * Copyright (C) 2002-2009 PCSX2 Dev Team * * PCSX2 is free software: you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. * * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with PCSX2. * If not, see . */ #pragma once // Implementations found here: Increment and Decrement Instructions! // Note: This header is meant to be included from within the x86Emitter::Internal namespace. template< bool isDec > class xImpl_IncDec { public: template< typename T > __forceinline void operator()( const xRegister& to ) const { if( Is8BitOp() ) { xWrite8( 0xfe ); EmitSibMagic( isDec ? 1 : 0, to ); } else { prefix16(); xWrite8( (isDec ? 0x48 : 0x40) | to.Id ); } } template< typename T > __forceinline void operator()( const ModSibStrict& sibdest ) const { prefix16(); xWrite8( Is8BitOp() ? 0xfe : 0xff ); EmitSibMagic( isDec ? 1 : 0, sibdest ); } xImpl_IncDec() {} // don't ask. };