504 DCHECK((instr->Bits(27, 24) == 0xE) ||
505 (instr->Bits(27, 24) == 0xF) );
507 if (instr->Bit(28) == 0) {
510 if (instr->Bit(29) == 1) {
511 V::VisitUnallocated(instr);
513 if (instr->Bits(31, 30) == 0x3) {
514 V::VisitUnallocated(instr);
515 }
else if (instr->Bits(31, 30) == 0x1) {
518 if (instr->Bit(24) == 0) {
519 if (instr->Bit(21) == 0) {
520 if ((instr->Bit(23) == 1) ||
521 (instr->Bit(18) == 1) ||
522 (instr->Mask(0x80008000) == 0x00000000) ||
523 (instr->Mask(0x000E0000) == 0x00000000) ||
524 (instr->Mask(0x000E0000) == 0x000A0000) ||
525 (instr->Mask(0x00160000) == 0x00000000) ||
526 (instr->Mask(0x00160000) == 0x00120000)) {
527 V::VisitUnallocated(instr);
529 V::VisitFPFixedPointConvert(instr);
532 if (instr->Bits(15, 10) == 32) {
533 V::VisitUnallocated(instr);
534 }
else if (instr->Bits(15, 10) == 0) {
535 if ((instr->Bits(23, 22) == 0x3) ||
536 (instr->Mask(0x000E0000) == 0x000A0000) ||
537 (instr->Mask(0x000E0000) == 0x000C0000) ||
538 (instr->Mask(0x00160000) == 0x00120000) ||
539 (instr->Mask(0x00160000) == 0x00140000) ||
540 (instr->Mask(0x20C40000) == 0x00800000) ||
541 (instr->Mask(0x20C60000) == 0x00840000) ||
542 (instr->Mask(0xA0C60000) == 0x80060000) ||
543 (instr->Mask(0xA0C60000) == 0x00860000) ||
544 (instr->Mask(0xA0C60000) == 0x00460000) ||
545 (instr->Mask(0xA0CE0000) == 0x80860000) ||
546 (instr->Mask(0xA0CE0000) == 0x804E0000) ||
547 (instr->Mask(0xA0CE0000) == 0x000E0000) ||
548 (instr->Mask(0xA0D60000) == 0x00160000) ||
549 (instr->Mask(0xA0D60000) == 0x80560000) ||
550 (instr->Mask(0xA0D60000) == 0x80960000)) {
551 V::VisitUnallocated(instr);
553 V::VisitFPIntegerConvert(instr);
555 }
else if (instr->Bits(14, 10) == 16) {
556 const Instr masked_A0DF8000 = instr->Mask(0xA0DF8000);
557 if ((instr->Mask(0x80180000) != 0) ||
558 (masked_A0DF8000 == 0x00020000) ||
559 (masked_A0DF8000 == 0x00030000) ||
560 (masked_A0DF8000 == 0x00068000) ||
561 (masked_A0DF8000 == 0x00428000) ||
562 (masked_A0DF8000 == 0x00430000) ||
563 (masked_A0DF8000 == 0x00468000) ||
564 (instr->Mask(0xA0D80000) == 0x00800000) ||
565 (instr->Mask(0xA0DE0000) == 0x00C00000) ||
566 (instr->Mask(0xA0DF0000) == 0x00C30000) ||
567 (instr->Mask(0xA0DC0000) == 0x00C40000)) {
568 V::VisitUnallocated(instr);
570 V::VisitFPDataProcessing1Source(instr);
572 }
else if (instr->Bits(13, 10) == 8) {
573 if ((instr->Bits(15, 14) != 0) ||
574 (instr->Bits(2, 0) != 0) ||
575 (instr->Mask(0x80800000) != 0x00000000)) {
576 V::VisitUnallocated(instr);
578 V::VisitFPCompare(instr);
580 }
else if (instr->Bits(12, 10) == 4) {
581 if ((instr->Bits(9, 5) != 0) ||
582 (instr->Mask(0x80800000) != 0x00000000)) {
583 V::VisitUnallocated(instr);
585 V::VisitFPImmediate(instr);
588 if (instr->Mask(0x80800000) != 0x00000000) {
589 V::VisitUnallocated(instr);
591 switch (instr->Bits(11, 10)) {
593 V::VisitFPConditionalCompare(instr);
597 if ((instr->Bits(15, 14) == 0x3) ||
598 (instr->Mask(0x00009000) == 0x00009000) ||
599 (instr->Mask(0x0000A000) == 0x0000A000)) {
600 V::VisitUnallocated(instr);
602 V::VisitFPDataProcessing2Source(instr);
607 V::VisitFPConditionalSelect(instr);
617 DCHECK(instr->Bit(30) == 0);
618 if (instr->Mask(0xA0800000) != 0) {
619 V::VisitUnallocated(instr);
621 V::VisitFPDataProcessing3Source(instr);
void DecodeAdvSIMDDataProcessing(Instruction *instr)