Mercurial > hg > CbC > CbC_llvm
comparison lib/Target/Mips/MicroMipsDSPInstrInfo.td @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | 7d135dc70f03 |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
153 class PICK_PH_MM_ENC : POOL32A_3RB0_FMT<"pick.ph", 0b1000101101>; | 153 class PICK_PH_MM_ENC : POOL32A_3RB0_FMT<"pick.ph", 0b1000101101>; |
154 class PICK_QB_MM_ENC : POOL32A_3RB0_FMT<"pick.qb", 0b0111101101>; | 154 class PICK_QB_MM_ENC : POOL32A_3RB0_FMT<"pick.qb", 0b0111101101>; |
155 class SHILO_MM_ENC : POOL32A_4B0SHIFT6AC4B0_FMT<"shilo", 0b0000011101>; | 155 class SHILO_MM_ENC : POOL32A_4B0SHIFT6AC4B0_FMT<"shilo", 0b0000011101>; |
156 class SHILOV_MM_ENC : POOL32A_5B01RAC_FMT<"shilov", 0b01001001>; | 156 class SHILOV_MM_ENC : POOL32A_5B01RAC_FMT<"shilov", 0b01001001>; |
157 class WRDSP_MM_ENC : POOL32A_1RMASK7_FMT<"wrdsp", 0b01011001>; | 157 class WRDSP_MM_ENC : POOL32A_1RMASK7_FMT<"wrdsp", 0b01011001>; |
158 class APPEND_MMR2_ENC : POOL32A_2RSA5B0_FMT<"append", 0b1000010101>; | |
159 class MODSUB_MM_ENC : POOL32A_3RB0_FMT<"modsub", 0b1010010101>; | |
160 class MULSA_W_PH_MMR2_ENC : POOL32A_2RAC_FMT<"mulsa.w.ph", 0b10110010>; | |
161 class MULSAQ_S_W_PH_MM_ENC : POOL32A_2RAC_FMT<"mulsaq_s.w.ph", 0b11110010>; | |
162 class BPOSGE32C_MMR3_ENC : POOL32I_IMMB0_FMT<"bposge32c", 0b11001>; | |
163 class BITREV_MM_ENC : POOL32A_2R_FMT<"bitrev", 0b0011000100>; | |
164 class BALIGN_MMR2_ENC : POOL32A_2RBP_FMT<"balign">; | |
165 class BPOSGE32_MM_ENC : POOL32I_IMMB0_FMT<"bposge32", 0b11011>; | |
166 class CMP_EQ_PH_MM_ENC : POOL32A_2RB0_FMT<"cmp.eq.ph", 0b0000000101>; | |
167 class CMP_LE_PH_MM_ENC : POOL32A_2RB0_FMT<"cmp.le.ph", 0b0010000101>; | |
168 class CMP_LT_PH_MM_ENC : POOL32A_2RB0_FMT<"cmp.lt.ph", 0b0001000101>; | |
169 class CMPGDU_EQ_QB_MMR2_ENC : POOL32A_3RB0_FMT<"cmpgdu.eq.qb", 0b0110000101>; | |
170 class CMPGDU_LT_QB_MMR2_ENC : POOL32A_3RB0_FMT<"cmpgdu.lt.qb", 0b0111000101>; | |
171 class CMPGDU_LE_QB_MMR2_ENC : POOL32A_3RB0_FMT<"cmpgdu.le.qb", 0b1000000101>; | |
172 class CMPGU_EQ_QB_MM_ENC : POOL32S_3RB0_FMT<"cmpgu.eq.qb", 0b0011000101>; | |
173 class CMPGU_LT_QB_MM_ENC : POOL32S_3RB0_FMT<"cmpgu.lt.qb", 0b0100000101>; | |
174 class CMPGU_LE_QB_MM_ENC : POOL32S_3RB0_FMT<"cmpgu.le.qb", 0b0101000101>; | |
175 class CMPU_EQ_QB_MM_ENC : POOL32A_2R2B0_FMT<"cmpu.eq.qb", 0b1001000101>; | |
176 class CMPU_LT_QB_MM_ENC : POOL32A_2R2B0_FMT<"cmpu.lt.qb", 0b1010000101>; | |
177 class CMPU_LE_QB_MM_ENC : POOL32A_2R2B0_FMT<"cmpu.le.qb", 0b1011000101>; | |
158 | 178 |
159 // Instruction desc. | 179 // Instruction desc. |
160 class ABSQ_S_PH_MM_R2_DESC_BASE<string opstr, SDPatternOperator OpNode, | 180 class ABSQ_S_PH_MM_R2_DESC_BASE<string opstr, SDPatternOperator OpNode, |
161 InstrItinClass itin, RegisterOperand ROD, | 181 InstrItinClass itin, RegisterOperand ROD, |
162 RegisterOperand ROS = ROD> { | 182 RegisterOperand ROS = ROD> { |
337 string BaseOpcode = "raddu.w.qb"; | 357 string BaseOpcode = "raddu.w.qb"; |
338 } | 358 } |
339 | 359 |
340 class RDDSP_MM_DESC { | 360 class RDDSP_MM_DESC { |
341 dag OutOperandList = (outs GPR32Opnd:$rt); | 361 dag OutOperandList = (outs GPR32Opnd:$rt); |
342 dag InOperandList = (ins uimm16:$mask); | 362 dag InOperandList = (ins uimm7:$mask); |
343 string AsmString = !strconcat("rddsp", "\t$rt, $mask"); | 363 string AsmString = !strconcat("rddsp", "\t$rt, $mask"); |
344 list<dag> Pattern = [(set GPR32Opnd:$rt, (int_mips_rddsp immZExt10:$mask))]; | 364 list<dag> Pattern = [(set GPR32Opnd:$rt, (int_mips_rddsp immZExt7:$mask))]; |
345 InstrItinClass Itinerary = NoItinerary; | 365 InstrItinClass Itinerary = NoItinerary; |
346 } | 366 } |
347 | 367 |
348 class REPL_QB_MM_DESC { | 368 class REPL_QB_MM_DESC { |
349 dag OutOperandList = (outs DSPROpnd:$rt); | 369 dag OutOperandList = (outs DSPROpnd:$rt); |
350 dag InOperandList = (ins uimm16:$imm); | 370 dag InOperandList = (ins uimm8:$imm); |
351 string AsmString = !strconcat("repl.qb", "\t$rt, $imm"); | 371 string AsmString = !strconcat("repl.qb", "\t$rt, $imm"); |
352 list<dag> Pattern = [(set DSPROpnd:$rt, (int_mips_repl_qb immZExt8:$imm))]; | 372 list<dag> Pattern = [(set DSPROpnd:$rt, (int_mips_repl_qb immZExt8:$imm))]; |
353 InstrItinClass Itinerary = NoItinerary; | 373 InstrItinClass Itinerary = NoItinerary; |
354 } | 374 } |
355 | 375 |
365 dag InOperandList = (ins GPR32Opnd:$rt, uimm7:$mask); | 385 dag InOperandList = (ins GPR32Opnd:$rt, uimm7:$mask); |
366 string AsmString = !strconcat("wrdsp", "\t$rt, $mask"); | 386 string AsmString = !strconcat("wrdsp", "\t$rt, $mask"); |
367 list<dag> Pattern = [(int_mips_wrdsp GPR32Opnd:$rt, immZExt7:$mask)]; | 387 list<dag> Pattern = [(int_mips_wrdsp GPR32Opnd:$rt, immZExt7:$mask)]; |
368 InstrItinClass Itinerary = NoItinerary; | 388 InstrItinClass Itinerary = NoItinerary; |
369 } | 389 } |
390 | |
391 class BPOSGE32C_MMR3_DESC { | |
392 dag OutOperandList = (outs); | |
393 dag InOperandList = (ins brtarget1SImm16:$offset); | |
394 string AsmString = !strconcat("bposge32c", "\t$offset"); | |
395 InstrItinClass Itinerary = NoItinerary; | |
396 bit isBranch = 1; | |
397 bit isTerminator = 1; | |
398 bit hasDelaySlot = 0; | |
399 } | |
400 | |
401 class BALIGN_MMR2_DESC { | |
402 dag OutOperandList = (outs GPR32Opnd:$rt); | |
403 dag InOperandList = (ins GPR32Opnd:$rs, uimm2:$bp, GPR32Opnd:$src); | |
404 string AsmString = !strconcat("balign", "\t$rt, $rs, $bp"); | |
405 list<dag> Pattern = [(set GPR32Opnd:$rt, (int_mips_balign GPR32Opnd:$src, | |
406 GPR32Opnd:$rs, | |
407 immZExt2:$bp))]; | |
408 InstrItinClass Itinerary = NoItinerary; | |
409 string Constraints = "$src = $rt"; | |
410 } | |
411 | |
412 class BITREV_MM_DESC : ABSQ_S_PH_MM_R2_DESC_BASE<"bitrev", int_mips_bitrev, | |
413 NoItinerary, GPR32Opnd>; | |
414 | |
415 class BPOSGE32_MM_DESC : BPOSGE32_DESC_BASE<"bposge32", brtarget_mm, | |
416 NoItinerary>; | |
370 | 417 |
371 // Instruction defs. | 418 // Instruction defs. |
372 // microMIPS DSP Rev 1 | 419 // microMIPS DSP Rev 1 |
373 def ADDQ_PH_MM : DspMMRel, ADDQ_PH_MM_ENC, ADDQ_PH_DESC; | 420 def ADDQ_PH_MM : DspMMRel, ADDQ_PH_MM_ENC, ADDQ_PH_DESC; |
374 def ADDQ_S_PH_MM : DspMMRel, ADDQ_S_PH_MM_ENC, ADDQ_S_PH_DESC; | 421 def ADDQ_S_PH_MM : DspMMRel, ADDQ_S_PH_MM_ENC, ADDQ_S_PH_DESC; |
470 def PICK_PH_MM : DspMMRel, PICK_PH_MM_ENC, PICK_PH_DESC; | 517 def PICK_PH_MM : DspMMRel, PICK_PH_MM_ENC, PICK_PH_DESC; |
471 def PICK_QB_MM : DspMMRel, PICK_QB_MM_ENC, PICK_QB_DESC; | 518 def PICK_QB_MM : DspMMRel, PICK_QB_MM_ENC, PICK_QB_DESC; |
472 def SHILO_MM : DspMMRel, SHILO_MM_ENC, SHILO_DESC; | 519 def SHILO_MM : DspMMRel, SHILO_MM_ENC, SHILO_DESC; |
473 def SHILOV_MM : DspMMRel, SHILOV_MM_ENC, SHILOV_DESC; | 520 def SHILOV_MM : DspMMRel, SHILOV_MM_ENC, SHILOV_DESC; |
474 def WRDSP_MM : DspMMRel, WRDSP_MM_ENC, WRDSP_MM_DESC; | 521 def WRDSP_MM : DspMMRel, WRDSP_MM_ENC, WRDSP_MM_DESC; |
522 def MODSUB_MM : DspMMRel, MODSUB_MM_ENC, MODSUB_DESC; | |
523 def MULSAQ_S_W_PH_MM : DspMMRel, MULSAQ_S_W_PH_MM_ENC, MULSAQ_S_W_PH_DESC; | |
524 def BITREV_MM : DspMMRel, BITREV_MM_ENC, BITREV_MM_DESC; | |
525 def BPOSGE32_MM : DspMMRel, BPOSGE32_MM_ENC, BPOSGE32_MM_DESC, | |
526 ISA_MIPS1_NOT_32R6_64R6; | |
527 def CMP_EQ_PH_MM : DspMMRel, CMP_EQ_PH_MM_ENC, CMP_EQ_PH_DESC; | |
528 def CMP_LT_PH_MM : DspMMRel, CMP_LT_PH_MM_ENC, CMP_LT_PH_DESC; | |
529 def CMP_LE_PH_MM : DspMMRel, CMP_LE_PH_MM_ENC, CMP_LE_PH_DESC; | |
530 def CMPGU_EQ_QB_MM : DspMMRel, CMPGU_EQ_QB_MM_ENC, CMPGU_EQ_QB_DESC; | |
531 def CMPGU_LT_QB_MM : DspMMRel, CMPGU_LT_QB_MM_ENC, CMPGU_LT_QB_DESC; | |
532 def CMPGU_LE_QB_MM : DspMMRel, CMPGU_LE_QB_MM_ENC, CMPGU_LE_QB_DESC; | |
533 def CMPU_EQ_QB_MM : DspMMRel, CMPU_EQ_QB_MM_ENC, CMPU_EQ_QB_DESC; | |
534 def CMPU_LT_QB_MM : DspMMRel, CMPU_LT_QB_MM_ENC, CMPU_LT_QB_DESC; | |
535 def CMPU_LE_QB_MM : DspMMRel, CMPU_LE_QB_MM_ENC, CMPU_LE_QB_DESC; | |
475 // microMIPS DSP Rev 2 | 536 // microMIPS DSP Rev 2 |
476 def ABSQ_S_QB_MMR2 : DspMMRel, ABSQ_S_QB_MMR2_ENC, ABSQ_S_QB_MMR2_DESC, | 537 def ABSQ_S_QB_MMR2 : DspMMRel, ABSQ_S_QB_MMR2_ENC, ABSQ_S_QB_MMR2_DESC, |
477 ISA_DSPR2; | 538 ISA_DSPR2; |
478 def ADDQH_PH_MMR2 : DspMMRel, ADDQH_PH_MMR2_ENC, ADDQH_PH_DESC, ISA_DSPR2; | 539 def ADDQH_PH_MMR2 : DspMMRel, ADDQH_PH_MMR2_ENC, ADDQH_PH_DESC, ISA_DSPR2; |
479 def ADDQH_R_PH_MMR2 : DspMMRel, ADDQH_R_PH_MMR2_ENC, ADDQH_R_PH_DESC, ISA_DSPR2; | 540 def ADDQH_R_PH_MMR2 : DspMMRel, ADDQH_R_PH_MMR2_ENC, ADDQH_R_PH_DESC, ISA_DSPR2; |
493 def SHRA_R_QB_MMR2 : DspMMRel, SHRA_R_QB_MMR2_ENC, SHRA_R_QB_MMR2_DESC, | 554 def SHRA_R_QB_MMR2 : DspMMRel, SHRA_R_QB_MMR2_ENC, SHRA_R_QB_MMR2_DESC, |
494 ISA_DSPR2; | 555 ISA_DSPR2; |
495 def SHRAV_QB_MMR2 : DspMMRel, SHRAV_QB_MMR2_ENC, SHRAV_QB_MMR2_DESC, ISA_DSPR2; | 556 def SHRAV_QB_MMR2 : DspMMRel, SHRAV_QB_MMR2_ENC, SHRAV_QB_MMR2_DESC, ISA_DSPR2; |
496 def SHRAV_R_QB_MMR2 : DspMMRel, SHRAV_R_QB_MMR2_ENC, SHRAV_R_QB_MMR2_DESC, | 557 def SHRAV_R_QB_MMR2 : DspMMRel, SHRAV_R_QB_MMR2_ENC, SHRAV_R_QB_MMR2_DESC, |
497 ISA_DSPR2; | 558 ISA_DSPR2; |
559 def BALIGN_MMR2 : DspMMRel, BALIGN_MMR2_ENC, BALIGN_MMR2_DESC, ISA_DSPR2; | |
560 def CMPGDU_EQ_QB_MMR2 : DspMMRel, CMPGDU_EQ_QB_MMR2_ENC, CMPGDU_EQ_QB_DESC, | |
561 ISA_DSPR2; | |
562 def CMPGDU_LT_QB_MMR2 : DspMMRel, CMPGDU_LT_QB_MMR2_ENC, CMPGDU_LT_QB_DESC, | |
563 ISA_DSPR2; | |
564 def CMPGDU_LE_QB_MMR2 : DspMMRel, CMPGDU_LE_QB_MMR2_ENC, CMPGDU_LE_QB_DESC, | |
565 ISA_DSPR2; | |
498 def SHRL_PH_MMR2 : DspMMRel, SHRL_PH_MMR2_ENC, SHRL_PH_MMR2_DESC, ISA_DSPR2; | 566 def SHRL_PH_MMR2 : DspMMRel, SHRL_PH_MMR2_ENC, SHRL_PH_MMR2_DESC, ISA_DSPR2; |
499 def SHRLV_PH_MMR2 : DspMMRel, SHRLV_PH_MMR2_ENC, SHRLV_PH_MMR2_DESC, ISA_DSPR2; | 567 def SHRLV_PH_MMR2 : DspMMRel, SHRLV_PH_MMR2_ENC, SHRLV_PH_MMR2_DESC, ISA_DSPR2; |
500 def SUBQH_PH_MMR2 : DspMMRel, SUBQH_PH_MMR2_ENC, SUBQH_PH_DESC, ISA_DSPR2; | 568 def SUBQH_PH_MMR2 : DspMMRel, SUBQH_PH_MMR2_ENC, SUBQH_PH_DESC, ISA_DSPR2; |
501 def SUBQH_R_PH_MMR2 : DspMMRel, SUBQH_R_PH_MMR2_ENC, SUBQH_R_PH_DESC, ISA_DSPR2; | 569 def SUBQH_R_PH_MMR2 : DspMMRel, SUBQH_R_PH_MMR2_ENC, SUBQH_R_PH_DESC, ISA_DSPR2; |
502 def SUBQH_W_MMR2 : DspMMRel, SUBQH_W_MMR2_ENC, SUBQH_W_DESC, ISA_DSPR2; | 570 def SUBQH_W_MMR2 : DspMMRel, SUBQH_W_MMR2_ENC, SUBQH_W_DESC, ISA_DSPR2; |
524 PRECR_SRA_R_PH_W_DESC, ISA_DSPR2; | 592 PRECR_SRA_R_PH_W_DESC, ISA_DSPR2; |
525 def PREPEND_MMR2 : DspMMRel, PREPEND_MMR2_ENC, PREPEND_DESC, ISA_DSPR2; | 593 def PREPEND_MMR2 : DspMMRel, PREPEND_MMR2_ENC, PREPEND_DESC, ISA_DSPR2; |
526 | 594 |
527 // Instruction alias. | 595 // Instruction alias. |
528 def : MMDSPInstAlias<"wrdsp $rt", (WRDSP_MM GPR32Opnd:$rt, 0x1F), 1>; | 596 def : MMDSPInstAlias<"wrdsp $rt", (WRDSP_MM GPR32Opnd:$rt, 0x1F), 1>; |
597 def APPEND_MMR2 : DspMMRel, APPEND_MMR2_ENC, APPEND_DESC, ISA_DSPR2; | |
598 def MULSA_W_PH_MMR2 : DspMMRel, MULSA_W_PH_MMR2_ENC, MULSA_W_PH_DESC, ISA_DSPR2; | |
599 // microMIPS DSP Rev 3 | |
600 def BPOSGE32C_MMR3 : DspMMRel, BPOSGE32C_MMR3_ENC, BPOSGE32C_MMR3_DESC, | |
601 ISA_DSPR3; |