Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: pnacl-llvm/NaClBitcodeDecoders.cpp

Issue 1960393002: Subzero: Add necessary PNaCl files for standalone build. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero@master
Patch Set: make format Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pnacl-llvm/NaClBitCodes.cpp ('k') | pnacl-llvm/NaClBitcodeHeader.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 //===- NaClBitcodeDecoders.cpp --------------------------------------------===//
2 // Internal implementation of decoder functions for PNaCl Bitcode files.
3 //
4 // The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #include "llvm/Bitcode/NaCl/NaClBitcodeDecoders.h"
12
13 namespace llvm {
14 namespace naclbitc {
15
16 bool DecodeCastOpcode(uint64_t NaClOpcode,
17 Instruction::CastOps &LLVMOpcode) {
18 switch (NaClOpcode) {
19 default:
20 LLVMOpcode = Instruction::BitCast;
21 return false;
22 case naclbitc::CAST_TRUNC:
23 LLVMOpcode = Instruction::Trunc;
24 return true;
25 case naclbitc::CAST_ZEXT:
26 LLVMOpcode = Instruction::ZExt;
27 return true;
28 case naclbitc::CAST_SEXT:
29 LLVMOpcode = Instruction::SExt;
30 return true;
31 case naclbitc::CAST_FPTOUI:
32 LLVMOpcode = Instruction::FPToUI;
33 return true;
34 case naclbitc::CAST_FPTOSI:
35 LLVMOpcode = Instruction::FPToSI;
36 return true;
37 case naclbitc::CAST_UITOFP:
38 LLVMOpcode = Instruction::UIToFP;
39 return true;
40 case naclbitc::CAST_SITOFP:
41 LLVMOpcode = Instruction::SIToFP;
42 return true;
43 case naclbitc::CAST_FPTRUNC:
44 LLVMOpcode = Instruction::FPTrunc;
45 return true;
46 case naclbitc::CAST_FPEXT:
47 LLVMOpcode = Instruction::FPExt;
48 return true;
49 case naclbitc::CAST_BITCAST:
50 LLVMOpcode = Instruction::BitCast;
51 return true;
52 }
53 }
54
55 bool DecodeLinkage(uint64_t NaClLinkage,
56 GlobalValue::LinkageTypes &LLVMLinkage) {
57 switch (NaClLinkage) {
58 default:
59 LLVMLinkage = GlobalValue::InternalLinkage;
60 return false;
61 case naclbitc::LINKAGE_EXTERNAL:
62 LLVMLinkage = GlobalValue::ExternalLinkage;
63 return true;
64 case naclbitc::LINKAGE_INTERNAL:
65 LLVMLinkage = GlobalValue::InternalLinkage;
66 return true;
67 }
68 }
69
70 bool DecodeBinaryOpcode(uint64_t NaClOpcode, Type *Ty,
71 Instruction::BinaryOps &LLVMOpcode) {
72 switch (NaClOpcode) {
73 default:
74 LLVMOpcode = Instruction::Add;
75 return false;
76 case naclbitc::BINOP_ADD:
77 LLVMOpcode = Ty->isFPOrFPVectorTy() ? Instruction::FAdd : Instruction::Add;
78 return true;
79 case naclbitc::BINOP_SUB:
80 LLVMOpcode = Ty->isFPOrFPVectorTy() ? Instruction::FSub : Instruction::Sub;
81 return true;
82 case naclbitc::BINOP_MUL:
83 LLVMOpcode = Ty->isFPOrFPVectorTy() ? Instruction::FMul : Instruction::Mul;
84 return true;
85 case naclbitc::BINOP_UDIV:
86 LLVMOpcode = Instruction::UDiv;
87 return true;
88 case naclbitc::BINOP_SDIV:
89 LLVMOpcode = Ty->isFPOrFPVectorTy() ? Instruction::FDiv : Instruction::SDiv;
90 return true;
91 case naclbitc::BINOP_UREM:
92 LLVMOpcode = Instruction::URem;
93 return true;
94 case naclbitc::BINOP_SREM:
95 LLVMOpcode = Ty->isFPOrFPVectorTy() ? Instruction::FRem : Instruction::SRem;
96 return true;
97 case naclbitc::BINOP_SHL:
98 LLVMOpcode = Instruction::Shl;
99 return true;
100 case naclbitc::BINOP_LSHR:
101 LLVMOpcode = Instruction::LShr;
102 return true;
103 case naclbitc::BINOP_ASHR:
104 LLVMOpcode = Instruction::AShr;
105 return true;
106 case naclbitc::BINOP_AND:
107 LLVMOpcode = Instruction::And;
108 return true;
109 case naclbitc::BINOP_OR:
110 LLVMOpcode = Instruction::Or;
111 return true;
112 case naclbitc::BINOP_XOR:
113 LLVMOpcode = Instruction::Xor;
114 return true;
115 }
116 }
117
118 bool DecodeCallingConv(uint64_t NaClCallingConv,
119 CallingConv::ID &LLVMCallingConv) {
120 switch (NaClCallingConv) {
121 default:
122 LLVMCallingConv = CallingConv::C;
123 return false;
124 case naclbitc::C_CallingConv:
125 LLVMCallingConv = CallingConv::C;
126 return true;
127 }
128 }
129
130 bool DecodeFcmpPredicate(uint64_t NaClPredicate,
131 CmpInst::Predicate &LLVMPredicate) {
132 switch (NaClPredicate) {
133 default:
134 LLVMPredicate = CmpInst::FCMP_FALSE;
135 return false;
136 case naclbitc::FCMP_FALSE:
137 LLVMPredicate = CmpInst::FCMP_FALSE;
138 return true;
139 case naclbitc::FCMP_OEQ:
140 LLVMPredicate = CmpInst::FCMP_OEQ;
141 return true;
142 case naclbitc::FCMP_OGT:
143 LLVMPredicate = CmpInst::FCMP_OGT;
144 return true;
145 case naclbitc::FCMP_OGE:
146 LLVMPredicate = CmpInst::FCMP_OGE;
147 return true;
148 case naclbitc::FCMP_OLT:
149 LLVMPredicate = CmpInst::FCMP_OLT;
150 return true;
151 case naclbitc::FCMP_OLE:
152 LLVMPredicate = CmpInst::FCMP_OLE;
153 return true;
154 case naclbitc::FCMP_ONE:
155 LLVMPredicate = CmpInst::FCMP_ONE;
156 return true;
157 case naclbitc::FCMP_ORD:
158 LLVMPredicate = CmpInst::FCMP_ORD;
159 return true;
160 case naclbitc::FCMP_UNO:
161 LLVMPredicate = CmpInst::FCMP_UNO;
162 return true;
163 case naclbitc::FCMP_UEQ:
164 LLVMPredicate = CmpInst::FCMP_UEQ;
165 return true;
166 case naclbitc::FCMP_UGT:
167 LLVMPredicate = CmpInst::FCMP_UGT;
168 return true;
169 case naclbitc::FCMP_UGE:
170 LLVMPredicate = CmpInst::FCMP_UGE;
171 return true;
172 case naclbitc::FCMP_ULT:
173 LLVMPredicate = CmpInst::FCMP_ULT;
174 return true;
175 case naclbitc::FCMP_ULE:
176 LLVMPredicate = CmpInst::FCMP_ULE;
177 return true;
178 case naclbitc::FCMP_UNE:
179 LLVMPredicate = CmpInst::FCMP_UNE;
180 return true;
181 case naclbitc::FCMP_TRUE:
182 LLVMPredicate = CmpInst::FCMP_TRUE;
183 return true;
184 }
185 }
186
187 bool DecodeIcmpPredicate(uint64_t NaClPredicate,
188 CmpInst::Predicate &LLVMPredicate) {
189 switch (NaClPredicate) {
190 default:
191 LLVMPredicate = CmpInst::ICMP_EQ;
192 return false;
193 case naclbitc::ICMP_EQ:
194 LLVMPredicate = CmpInst::ICMP_EQ;
195 return true;
196 case naclbitc::ICMP_NE:
197 LLVMPredicate = CmpInst::ICMP_NE;
198 return true;
199 case naclbitc::ICMP_UGT:
200 LLVMPredicate = CmpInst::ICMP_UGT;
201 return true;
202 case naclbitc::ICMP_UGE:
203 LLVMPredicate = CmpInst::ICMP_UGE;
204 return true;
205 case naclbitc::ICMP_ULT:
206 LLVMPredicate = CmpInst::ICMP_ULT;
207 return true;
208 case naclbitc::ICMP_ULE:
209 LLVMPredicate = CmpInst::ICMP_ULE;
210 return true;
211 case naclbitc::ICMP_SGT:
212 LLVMPredicate = CmpInst::ICMP_SGT;
213 return true;
214 case naclbitc::ICMP_SGE:
215 LLVMPredicate = CmpInst::ICMP_SGE;
216 return true;
217 case naclbitc::ICMP_SLT:
218 LLVMPredicate = CmpInst::ICMP_SLT;
219 return true;
220 case naclbitc::ICMP_SLE:
221 LLVMPredicate = CmpInst::ICMP_SLE;
222 return true;
223 }
224 }
225
226
227 }
228 }
OLDNEW
« no previous file with comments | « pnacl-llvm/NaClBitCodes.cpp ('k') | pnacl-llvm/NaClBitcodeHeader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698