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

Subversion Repositories ao486

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_POPF        #AUTOGEN_NEXT_CMD
4
 
5
`define CMDEX_POPF_STEP_0       4'd0
6
`define CMDEX_POPF_STEP_1       4'd1
7
8
 
9
10
dec_ready_one && decoder[7:0] == 8'h9D
11
`CMD_POPF
12
SET(dec_cmdex, `CMDEX_POPF_STEP_0);
13
SET(consume_one);
14
SET(dec_is_complex);
15
16
 
17
18
`CMDEX_POPF_STEP_0
19
LOOP(`CMDEX_POPF_STEP_1);
20
21
 
22
23
IF(rd_cmd == `CMD_POPF && rd_cmdex == `CMDEX_POPF_STEP_0);
24
 
25
    SET(address_stack_pop);
26
    // waiting for esp in 'address_ready'
27
 
28
    SET(rd_src_is_memory);
29
 
30
    SET(rd_req_esp);
31
    SET(rd_req_eflags);
32
 
33
    IF(rd_mutex_busy_memory); SET(rd_waiting);
34
    ELSE();
35
        SET(read_virtual);
36
 
37
        IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
38
    ENDIF();
39
ENDIF();
40
41
 
42
43
IF(exe_cmd == `CMD_POPF && exe_cmdex == `CMDEX_POPF_STEP_0);
44
 
45
    SET(offset_pop);
46
 
47
    SET(exe_result2, src);
48
 
49
    IF(exe_mutex_current[`MUTEX_EFLAGS_BIT]); SET(exe_waiting);
50
    ELSE();
51
        IF(v8086_mode && iopl < 2'd3);
52
            SET(exe_waiting);
53
            SET(exe_trigger_gp_fault); //exception GP(0)
54
        ENDIF();
55
    ENDIF();
56
ENDIF();
57
58
 
59
60
IF(wr_cmd == `CMD_POPF && wr_cmdex == `CMDEX_POPF_STEP_0);
61
 
62
    SAVE(cflag,  result2[0]);
63
    SAVE(pflag,  result2[2]);
64
    SAVE(aflag,  result2[4]);
65
    SAVE(zflag,  result2[6]);
66
    SAVE(sflag,  result2[7]);
67
    SAVE(tflag,  result2[8]);
68
    SAVE(dflag,  result2[10]);
69
    SAVE(oflag,  result2[11]);
70
    SAVE(ntflag, result2[14]);
71
 
72
    IF(wr_operand_32bit);
73
        SAVE(rflag,  result2[16]);
74
        SAVE(acflag, result2[18]);
75
        SAVE(idflag, result2[21]);
76
    ENDIF();
77
 
78
    IF((protected_mode && cpl == 2'd0) || real_mode);
79
        SAVE(iopl,  result2[13:12]);
80
    ENDIF();
81
 
82
    IF((protected_mode && cpl <= iopl) || v8086_mode || real_mode);
83
        SAVE(iflag, result2[9]);
84
    ENDIF();
85
 
86
    //vmflag set not possible
87
 
88
    SAVE(esp, wr_stack_esp);
89
 
90
    // clear pipeline
91
    SET(wr_req_reset_micro);
92
    SET(wr_req_reset_rd);
93
    SET(wr_req_reset_exe);
94
ENDIF();
95

powered by: WebSVN 2.1.0

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