source: Daodan/src/beaengine/Includes/instr_set/opcodes_CLMUL.c@ 1027

Last change on this file since 1027 was 984, checked in by alloc, 11 years ago

Daodan: TV code

File size: 2.9 KB
RevLine 
[984]1/* Copyright 2006-2009, BeatriX
2 * File coded by BeatriX
3 *
4 * This file is part of BeaEngine.
5 *
6 * BeaEngine is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * BeaEngine is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with BeaEngine. If not, see <http://www.gnu.org/licenses/>. */
18
19/* ====================================================================
20 * 0x 0f 3a 44
21 * ==================================================================== */
22void __bea_callspec__ pclmulqdq_(PDISASM pMyDisasm)
23{
24 /* ========== 0x66 */
25 if (GV.OperandSize == 16) {
26 (*pMyDisasm).Prefix.OperandSize = MandatoryPrefix;
27 GV.MemDecoration = Arg2dqword;
28 (*pMyDisasm).Instruction.Category = CLMUL_INSTRUCTION;
29
30 GV.ImmediatSize = 8;
31 GV.SSE_ = 1;
32 GxEx(pMyDisasm);
33 GV.SSE_ = 0;
34 GV.EIP_++;
35 if (!Security(0, pMyDisasm)) return;
36
37 (*pMyDisasm).Instruction.Immediat = *((UInt8*)(UIntPtr) (GV.EIP_- 1));
38
39 if ((*pMyDisasm).Instruction.Immediat == 0) {
40 #ifndef BEA_LIGHT_DISASSEMBLY
41 (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "pclmullqlqdq ");
42 #endif
43 }
44 else if ((*pMyDisasm).Instruction.Immediat == 0x01 ) {
45 #ifndef BEA_LIGHT_DISASSEMBLY
46 (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "pclmulhqlqdq ");
47 #endif
48 }
49 else if ((*pMyDisasm).Instruction.Immediat == 0x10 ) {
50 #ifndef BEA_LIGHT_DISASSEMBLY
51 (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "pclmullqhqdq ");
52 #endif
53 }
54 else if ((*pMyDisasm).Instruction.Immediat == 0x011 ) {
55 #ifndef BEA_LIGHT_DISASSEMBLY
56 (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "pclmulhqhqdq ");
57 #endif
58 }
59 else {
60 #ifndef BEA_LIGHT_DISASSEMBLY
61 (void) strcpy ((*pMyDisasm).Instruction.Mnemonic, "pclmulqdq ");
62 #endif
63 GV.third_arg = 1;
64 #ifndef BEA_LIGHT_DISASSEMBLY
65 (void) CopyFormattedNumber(pMyDisasm, (char*) (*pMyDisasm).Argument3.ArgMnemonic, "%.2X",(Int64) *((UInt8*)(UIntPtr) (GV.EIP_- 1)));
66 #endif
67 (*pMyDisasm).Argument3.ArgType = CONSTANT_TYPE+ABSOLUTE_;
68 (*pMyDisasm).Argument3.ArgSize = 8;
69 }
70 }
71 else {
72 FailDecode(pMyDisasm);
73 }
74}
Note: See TracBrowser for help on using the repository browser.