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

Subversion Repositories ao486

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_MUL         #AUTOGEN_NEXT_CMD
4
5
 
6
7
dec_ready_modregrm_one && { decoder[7:1], 1'b0 } == 8'hF6 && decoder[13:11] == 3'd4
8
`CMD_MUL
9
IF(decoder[0] == 1'b0); SET(dec_is_8bit); ENDIF();
10
SET(consume_modregrm_one);
11
12
 
13
14
IF(rd_cmd == `CMD_MUL);
15
 
16
    SET(rd_dst_is_edx_eax);
17
 
18
    SET(rd_req_eflags);
19
    SET(rd_req_edx_eax, rd_decoder[0]);
20
    SET(rd_req_eax);
21
 
22
    // dst: implicit, src: rm
23
    IF(rd_modregrm_mod == 2'b11);
24
 
25
        SET(rd_src_is_rm);
26
 
27
        IF(rd_mutex_busy_eax || rd_mutex_busy_modregrm_rm); SET(rd_waiting); ENDIF();
28
    ENDIF();
29
 
30
    // dst: implicit, src: memory
31
    IF(rd_modregrm_mod != 2'b11);
32
 
33
        SET(rd_src_is_memory);
34
 
35
        IF(rd_mutex_busy_eax || rd_mutex_busy_memory); SET(rd_waiting);
36
        ELSE();
37
            SET(read_virtual);
38
 
39
            IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
40
        ENDIF();
41
    ENDIF();
42
ENDIF();
43
44
 
45
46
IF(exe_cmd == `CMD_MUL);
47
 
48
    SET(exe_result,  mult_result[31:0]);
49
    SET(exe_result2, mult_result[63:32]);
50
 
51
    IF(mult_busy); SET(exe_waiting); ENDIF();
52
ENDIF();
53
54
 
55
56
IF(wr_cmd == `CMD_MUL);
57
    SET(write_regrm, wr_dst_is_reg);
58
 
59
    IF(wr_dst_is_edx_eax);
60
        SAVE(eax, (wr_is_8bit || wr_operand_16bit)? { eax[31:16], result[15:0] } : result);
61
 
62
        IF(~(wr_is_8bit));
63
            SAVE(edx, (wr_operand_16bit)? { edx[31:16], result[31:16] } : result2);
64
        ENDIF();
65
    ENDIF();
66
 
67
    SAVE(zflag, zflag_result);
68
    SAVE(sflag, sflag_result);
69
    SAVE(pflag, pflag_result);
70
 
71
    SAVE(aflag, 1'b0);
72
    SAVE(cflag, wr_mult_overflow);
73
    SAVE(oflag, wr_mult_overflow);
74
ENDIF();
75

powered by: WebSVN 2.1.0

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