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

Side by Side Diff: src/trusted/validator_ragel/unreviewed/parse_instruction.rl

Issue 11000033: Move validator_x86_XX.rl out of unreviewed. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 /* 7 /*
8 * Hand-written Ragel machines and actions used in validator and decoding. 8 * Hand-written Ragel machines and actions used in validator and decoding.
9 * 9 *
10 * Note: this file includes many different machines which are supposed to be 10 * Note: this file includes many different machines which are supposed to be
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 701
702 action imm2_operand { 702 action imm2_operand {
703 SET_IMM_TYPE(IMM2); 703 SET_IMM_TYPE(IMM2);
704 SET_IMM_PTR(current_position); 704 SET_IMM_PTR(current_position);
705 } 705 }
706 action imm8_operand { 706 action imm8_operand {
707 SET_IMM_TYPE(IMM8); 707 SET_IMM_TYPE(IMM8);
708 SET_IMM_PTR(current_position); 708 SET_IMM_PTR(current_position);
709 } 709 }
710 action imm8_second_operand { 710 action imm8_second_operand {
711 SET_IMM2_TYPE(IMM8); 711 SET_SECOND_IMM_TYPE(IMM8);
712 SET_IMM2_PTR(current_position); 712 SET_IMM2_PTR(current_position);
713 } 713 }
714 action imm16_operand { 714 action imm16_operand {
715 SET_IMM_TYPE(IMM16); 715 SET_IMM_TYPE(IMM16);
716 SET_IMM_PTR(current_position - 1); 716 SET_IMM_PTR(current_position - 1);
717 } 717 }
718 action imm16_second_operand { 718 action imm16_second_operand {
719 SET_IMM2_TYPE(IMM16); 719 SET_SECOND_IMM_TYPE(IMM16);
720 SET_IMM2_PTR(current_position - 1); 720 SET_IMM2_PTR(current_position - 1);
721 } 721 }
722 action imm32_operand { 722 action imm32_operand {
723 SET_IMM_TYPE(IMM32); 723 SET_IMM_TYPE(IMM32);
724 SET_IMM_PTR(current_position - 3); 724 SET_IMM_PTR(current_position - 3);
725 } 725 }
726 action imm32_second_operand { 726 action imm32_second_operand {
727 SET_IMM2_TYPE(IMM32); 727 SET_SECOND_IMM_TYPE(IMM32);
728 SET_IMM2_PTR(current_position - 3); 728 SET_IMM2_PTR(current_position - 3);
729 } 729 }
730 action imm64_operand { 730 action imm64_operand {
731 SET_IMM_TYPE(IMM64); 731 SET_IMM_TYPE(IMM64);
732 SET_IMM_PTR(current_position - 7); 732 SET_IMM_PTR(current_position - 7);
733 } 733 }
734 action imm64_second_operand { 734 action imm64_second_operand {
735 SET_IMM2_TYPE(IMM64); 735 SET_SECOND_IMM_TYPE(IMM64);
736 SET_IMM2_PTR(current_position - 7); 736 SET_IMM2_PTR(current_position - 7);
737 } 737 }
738 }%% 738 }%%
739 739
740 %%{ 740 %%{
741 machine immediate_fields_parsing_common; 741 machine immediate_fields_parsing_common;
742 742
743 imm8 = any @imm8_operand $any_byte; 743 imm8 = any @imm8_operand $any_byte;
744 imm16 = any{2} @imm16_operand $any_byte; 744 imm16 = any{2} @imm16_operand $any_byte;
745 imm32 = any{4} @imm32_operand $any_byte; 745 imm32 = any{4} @imm32_operand $any_byte;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 # ragel machine. Ensure compilations error in case of accidental usage. 803 # ragel machine. Ensure compilations error in case of accidental usage.
804 action rel16_operand { 804 action rel16_operand {
805 #error rel16_operand should never be used in nacl 805 #error rel16_operand should never be used in nacl
806 } 806 }
807 807
808 # rel32 actions are used in relative calls and jumps with 32-bit offset. 808 # rel32 actions are used in relative calls and jumps with 32-bit offset.
809 action rel32_operand { 809 action rel32_operand {
810 Rel32Operand(current_position + 1, data, jump_dests, size, 810 Rel32Operand(current_position + 1, data, jump_dests, size,
811 &instruction_info_collected); 811 &instruction_info_collected);
812 } 812 }
813
814 # Action which marks last byte as not immediate. Most 3DNow! instructions,
815 # some AVX and XOP instructions have this property.
816 #
817 # This action is referenced by decode_x86_32 ragel machine in [autogenerated]
818 # "validator_x86_32_instruction.rl" file.
819 action last_byte_is_not_immediate {
820 instruction_info_collected |= LAST_BYTE_IS_NOT_IMMEDIATE;
821 }
813 }%% 822 }%%
814 823
815 %%{ 824 %%{
816 machine relative_fields_parsing; 825 machine relative_fields_parsing;
817 826
818 rel8 = any @rel8_operand $any_byte; 827 rel8 = any @rel8_operand $any_byte;
819 rel16 = any{2} @rel16_operand $any_byte; 828 rel16 = any{2} @rel16_operand $any_byte;
820 rel32 = any{4} @rel32_operand $any_byte; 829 rel32 = any{4} @rel32_operand $any_byte;
821 }%% 830 }%%
822 831
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 897
889 %%{ 898 %%{
890 machine decoder; 899 machine decoder;
891 900
892 action end_of_instruction_cleanup { 901 action end_of_instruction_cleanup {
893 process_instruction(instruction_begin, current_position + 1, &instruction, 902 process_instruction(instruction_begin, current_position + 1, &instruction,
894 userdata); 903 userdata);
895 instruction_begin = current_position + 1; 904 instruction_begin = current_position + 1;
896 SET_DISP_TYPE(DISPNONE); 905 SET_DISP_TYPE(DISPNONE);
897 SET_IMM_TYPE(IMMNONE); 906 SET_IMM_TYPE(IMMNONE);
898 SET_IMM2_TYPE(IMMNONE); 907 SET_SECOND_IMM_TYPE(IMMNONE);
899 SET_REX_PREFIX(FALSE); 908 SET_REX_PREFIX(FALSE);
900 SET_DATA16_PREFIX(FALSE); 909 SET_DATA16_PREFIX(FALSE);
901 SET_LOCK_PREFIX(FALSE); 910 SET_LOCK_PREFIX(FALSE);
902 SET_REPNZ_PREFIX(FALSE); 911 SET_REPNZ_PREFIX(FALSE);
903 SET_REPZ_PREFIX(FALSE); 912 SET_REPZ_PREFIX(FALSE);
904 SET_BRANCH_NOT_TAKEN(FALSE); 913 SET_BRANCH_NOT_TAKEN(FALSE);
905 SET_BRANCH_TAKEN(FALSE); 914 SET_BRANCH_TAKEN(FALSE);
906 /* Top three bis of VEX2 are inverted: see AMD/Intel manual. */ 915 /* Top three bis of VEX2 are inverted: see AMD/Intel manual. */
907 SET_VEX_PREFIX2(VEX_R | VEX_X | VEX_B); 916 SET_VEX_PREFIX2(VEX_R | VEX_X | VEX_B);
908 SET_VEX_PREFIX3(0x00); 917 SET_VEX_PREFIX3(0x00);
909 SET_ATT_INSTRUCTION_SUFFIX(NULL); 918 SET_ATT_INSTRUCTION_SUFFIX(NULL);
910 CLEAR_SPURIOUS_REX_B(); 919 CLEAR_SPURIOUS_REX_B();
911 CLEAR_SPURIOUS_REX_X(); 920 CLEAR_SPURIOUS_REX_X();
912 CLEAR_SPURIOUS_REX_R(); 921 CLEAR_SPURIOUS_REX_R();
913 CLEAR_SPURIOUS_REX_W(); 922 CLEAR_SPURIOUS_REX_W();
914 } 923 }
915 924
916 action report_fatal_error { 925 action report_fatal_error {
917 process_error(current_position, userdata); 926 process_error(current_position, userdata);
918 result = FALSE; 927 result = FALSE;
919 goto error_detected; 928 goto error_detected;
920 } 929 }
921 930
922 decoder = (one_instruction @end_of_instruction_cleanup)* 931 decoder = (one_instruction @end_of_instruction_cleanup)*
923 $!report_fatal_error; 932 $!report_fatal_error;
924 }%% 933 }%%
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698