OpenCores
URL https://opencores.org/ocsvn/ao486/ao486/trunk

Subversion Repositories ao486

[/] [ao486/] [trunk/] [rtl/] [ao486/] [commands/] [CMD_LGDT_LIDT.txt] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_LGDT        #AUTOGEN_NEXT_CMD
4
 
5
`define CMD_LIDT        #AUTOGEN_NEXT_CMD
6
 
7
`define CMDEX_LGDT_LIDT_STEP_1      4'd8
8
`define CMDEX_LGDT_LIDT_STEP_2      4'd9
9
`define CMDEX_LGDT_LIDT_STEP_LAST   4'd10
10
11
 
12
13
dec_ready_2byte_modregrm && decoder[7:0] == 8'h01 && decoder[13:11] == 3'd2
14
prefix_group_1_lock || `DEC_MODREGRM_IS_MOD_11
15
`CMD_LGDT
16
SET(dec_cmdex, `CMDEX_LGDT_LIDT_STEP_1);
17
SET(consume_modregrm_one);
18
SET(dec_is_complex);
19
20
 
21
22
dec_ready_2byte_modregrm && decoder[7:0] == 8'h01 && decoder[13:11] == 3'd3
23
prefix_group_1_lock || `DEC_MODREGRM_IS_MOD_11
24
`CMD_LIDT
25
SET(dec_cmdex, `CMDEX_LGDT_LIDT_STEP_1);
26
SET(consume_modregrm_one);
27
SET(dec_is_complex);
28
29
 
30
31
IF((mc_cmd == `CMD_LGDT || mc_cmd == `CMD_LIDT) && mc_cmdex_last == `CMDEX_LGDT_LIDT_STEP_1);
32
    DIRECT(mc_cmd, `CMDEX_LGDT_LIDT_STEP_2);
33
ENDIF();
34
 
35
IF((mc_cmd == `CMD_LGDT || mc_cmd == `CMD_LIDT) && mc_cmdex_last == `CMDEX_LGDT_LIDT_STEP_2);
36
    DIRECT(mc_cmd, `CMDEX_LGDT_LIDT_STEP_LAST);
37
ENDIF();
38
 
39
IF((mc_cmd == `CMD_LGDT || mc_cmd == `CMD_LIDT) && mc_cmdex_last == `CMDEX_LGDT_LIDT_STEP_LAST);
40
    DIRECT(mc_cmd, `CMDEX_LGDT_LIDT_STEP_LAST);
41
ENDIF();
42
43
 
44
45
IF((rd_cmd == `CMD_LGDT || rd_cmd == `CMD_LIDT) && (rd_cmdex == `CMDEX_LGDT_LIDT_STEP_1 || rd_cmdex == `CMDEX_LGDT_LIDT_STEP_2));
46
 
47
    IF(rd_cmdex == `CMDEX_LGDT_LIDT_STEP_1);
48
        SET(read_length_word);
49
    ENDIF();
50
 
51
    SET(address_ea_buffer_plus_2);
52
 
53
    IF(rd_cmdex == `CMDEX_LGDT_LIDT_STEP_2);
54
        SET(address_ea_buffer);
55
        SET(read_length_dword);
56
    ENDIF();
57
 
58
    IF(cpl == 2'd0);
59
 
60
        SET(rd_src_is_memory);
61
 
62
        IF(rd_mutex_busy_memory); SET(rd_waiting);
63
        ELSE();
64
            SET(read_virtual);
65
 
66
            IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
67
        ENDIF();
68
    ENDIF();
69
 
70
ENDIF();
71
72
 
73
74
IF(exe_cmd == `CMD_LGDT || exe_cmd == `CMD_LIDT);
75
 
76
    SET(exe_result2, src);
77
 
78
    IF(cpl != 2'd0);
79
        SET(exe_waiting);
80
        SET(exe_trigger_gp_fault); //exception GP(val)
81
    ENDIF();
82
ENDIF();
83
84
 
85
86
IF((wr_cmd == `CMD_LGDT || wr_cmd == `CMD_LIDT));
87
    IF(wr_cmdex == `CMDEX_LGDT_LIDT_STEP_1); SET(wr_not_finished); ENDIF();
88
 
89
    IF(wr_cmd == `CMD_LGDT);
90
        IF(wr_cmdex == `CMDEX_LGDT_LIDT_STEP_1);
91
            SAVE(gdtr_limit, result2[15:0]);
92
        ELSE();
93
            SAVE(gdtr_base, wr_operand_32bit? result2 : { 8'd0, result2[23:0] });
94
        ENDIF();
95
    ENDIF();
96
 
97
    IF(wr_cmd == `CMD_LIDT);
98
        IF(wr_cmdex == `CMDEX_LGDT_LIDT_STEP_1);
99
            SAVE(idtr_limit, result2[15:0]);
100
        ELSE();
101
            SAVE(idtr_base, wr_operand_32bit? result2 : { 8'd0, result2[23:0] });
102
        ENDIF();
103
    ENDIF();
104
 
105
    IF(wr_cmdex == `CMDEX_LGDT_LIDT_STEP_2);
106
        // clear pipeline
107
        SET(wr_req_reset_micro);
108
        SET(wr_req_reset_rd);
109
        SET(wr_req_reset_exe);
110
    ELSE();
111
        SET(wr_not_finished);
112
    ENDIF();
113
ENDIF();
114
115
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.