@@ -200,7 +200,7 @@ def : Pat<(mulhu GR:$src1, GR:$src2),
200
200
// load constants of various sizes // FIXME: prettyprint -ve constants
201
201
def : Pat<(i64 immSExt14:$imm), (ADDS r0, immSExt14:$imm)>;
202
202
def : Pat<(i64 imm64:$imm), (MOVL imm64:$imm)>;
203
- // TODO: def : Pat<(i1 1), (MOV p0 )>;
203
+ // TODO: def : Pat<(i1 1), (<stuff> )>;
204
204
205
205
def AND : AForm_DAG<0x03 , 0x0b , (ops GR:$dst, GR:$src1, GR:$src2),
206
206
" and $dst = $src1, $src2;;" ,
@@ -290,11 +290,51 @@ def CMPGEU: AForm_DAG<0x03, 0x0b, (ops PR:$dst, GR:$src1, GR:$src2),
290
290
" cmp.geu $dst, p0 = $src1, $src2;;" ,
291
291
[(set PR:$dst, (setuge GR:$src1, GR:$src2))]>;
292
292
293
+ // and we do the whole thing again for FP compares!
294
+ def FCMPEQ : AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
295
+ " fcmp.eq $dst, p0 = $src1, $src2;;" ,
296
+ [(set PR:$dst, (seteq FP:$src1, FP:$src2))]>;
297
+ def FCMPGT : AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
298
+ " fcmp.gt $dst, p0 = $src1, $src2;;" ,
299
+ [(set PR:$dst, (setgt FP:$src1, FP:$src2))]>;
300
+ def FCMPGE : AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
301
+ " fcmp.ge $dst, p0 = $src1, $src2;;" ,
302
+ [(set PR:$dst, (setge FP:$src1, FP:$src2))]>;
303
+ def FCMPLT : AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
304
+ " fcmp.lt $dst, p0 = $src1, $src2;;" ,
305
+ [(set PR:$dst, (setlt FP:$src1, FP:$src2))]>;
306
+ def FCMPLE : AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
307
+ " fcmp.le $dst, p0 = $src1, $src2;;" ,
308
+ [(set PR:$dst, (setle FP:$src1, FP:$src2))]>;
309
+ def FCMPNE : AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
310
+ " fcmp.neq $dst, p0 = $src1, $src2;;" ,
311
+ [(set PR:$dst, (setne FP:$src1, FP:$src2))]>;
312
+ def FCMPLTU: AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
313
+ " fcmp.ltu $dst, p0 = $src1, $src2;;" ,
314
+ [(set PR:$dst, (setult FP:$src1, FP:$src2))]>;
315
+ def FCMPGTU: AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
316
+ " fcmp.gtu $dst, p0 = $src1, $src2;;" ,
317
+ [(set PR:$dst, (setugt FP:$src1, FP:$src2))]>;
318
+ def FCMPLEU: AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
319
+ " fcmp.leu $dst, p0 = $src1, $src2;;" ,
320
+ [(set PR:$dst, (setule FP:$src1, FP:$src2))]>;
321
+ def FCMPGEU: AForm_DAG<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
322
+ " fcmp.geu $dst, p0 = $src1, $src2;;" ,
323
+ [(set PR:$dst, (setuge FP:$src1, FP:$src2))]>;
324
+
293
325
// TODO: support postincrement (reg, imm9) loads+stores - this needs more
294
326
// tablegen support
295
327
296
328
def PHI : PseudoInstIA64<(ops variable_ops), " PHI" >;
297
329
def IDEF : PseudoInstIA64<(ops variable_ops), " // IDEF" >;
330
+
331
+ def IDEF_GR_D : PseudoInstIA64_DAG<(ops GR:$reg), " // $reg = IDEF" ,
332
+ [(set GR:$reg, (undef))]>;
333
+ def IDEF_FP_D : PseudoInstIA64_DAG<(ops FP:$reg), " // $reg = IDEF" ,
334
+ [(set FP:$reg, (undef))]>;
335
+ def IDEF_PR_D : PseudoInstIA64_DAG<(ops PR:$reg), " // $reg = IDEF" ,
336
+ [(set PR:$reg, (undef))]>;
337
+
298
338
def IUSE : PseudoInstIA64<(ops variable_ops), " // IUSE" >;
299
339
def ADJUSTCALLSTACKUP : PseudoInstIA64<(ops variable_ops),
300
340
" // ADJUSTCALLSTACKUP" >;
@@ -365,28 +405,6 @@ def EXTRU : AForm<0x03, 0x0b, (ops GR:$dst, GR:$src1, u6imm:$imm1, u6imm:$imm2),
365
405
366
406
def DEPZ : AForm<0x03 , 0x0b , (ops GR:$dst, GR:$src1, u6imm:$imm1, u6imm:$imm2), " dep.z $dst = $src1, $imm1, $imm2;;" >;
367
407
368
- // and we do the whole thing again for FP compares!
369
- def FCMPEQ : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
370
- " fcmp.eq $dst, p0 = $src1, $src2;;" >;
371
- def FCMPGT : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
372
- " fcmp.gt $dst, p0 = $src1, $src2;;" >;
373
- def FCMPGE : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
374
- " fcmp.ge $dst, p0 = $src1, $src2;;" >;
375
- def FCMPLT : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
376
- " fcmp.lt $dst, p0 = $src1, $src2;;" >;
377
- def FCMPLE : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
378
- " fcmp.le $dst, p0 = $src1, $src2;;" >;
379
- def FCMPNE : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
380
- " fcmp.neq $dst, p0 = $src1, $src2;;" >;
381
- def FCMPLTU : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
382
- " fcmp.ltu $dst, p0 = $src1, $src2;;" >;
383
- def FCMPGTU : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
384
- " fcmp.gtu $dst, p0 = $src1, $src2;;" >;
385
- def FCMPLEU : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
386
- " fcmp.leu $dst, p0 = $src1, $src2;;" >;
387
- def FCMPGEU : AForm<0x03 , 0x0b , (ops PR:$dst, FP:$src1, FP:$src2),
388
- " fcmp.geu $dst, p0 = $src1, $src2;;" >;
389
-
390
408
def PCMPEQOR : AForm<0x03 , 0x0b , (ops PR:$dst, GR:$src1, GR:$src2, PR:$qp),
391
409
" ($qp) cmp.eq.or $dst, p0 = $src1, $src2;;" >;
392
410
def PCMPEQUNC : AForm<0x03 , 0x0b , (ops PR:$dst, GR:$src1, GR:$src2, PR:$qp),
0 commit comments