diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index bd6aef1..a3d510d 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -36,12 +36,12 @@ jobs: - name: Run conversion on reference example run: | uScope --input-file examples/reference/reference.out \ - --output-file reference.json + --output-dir res/ - name: Compare output with reference run: | - gunzip -c examples/reference/reference.json.gz > expected.json - diff -u reference.json expected.json + gunzip -c examples/reference/reference_0.json.gz > expected.json + diff -u res/reference_0.json expected.json - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 diff --git a/examples/reference/reference.S b/examples/reference/reference.S index e5283c2..ebf5e69 100644 --- a/examples/reference/reference.S +++ b/examples/reference/reference.S @@ -1,3 +1,5 @@ +.option norvc + .section .data .align 4 int_a: .word 10, 20 diff --git a/examples/reference/reference.json.gz b/examples/reference/reference.json.gz deleted file mode 100644 index 83b6b6b..0000000 Binary files a/examples/reference/reference.json.gz and /dev/null differ diff --git a/examples/reference/reference.out b/examples/reference/reference.out index f17a05a..db80232 100644 --- a/examples/reference/reference.out +++ b/examples/reference/reference.out @@ -1,3 +1,14 @@ +O3PipeView:deps:0:2:1 +O3PipeView:deps:0:4:3 +O3PipeView:deps:0:6:5 +O3PipeView:deps:0:8:2 +O3PipeView:deps:0:9:4 +O3PipeView:deps:0:10:8,9 +O3PipeView:deps:0:11:8,9 +O3PipeView:deps:0:12:8,9 +O3PipeView:deps:0:13:8,9 +O3PipeView:deps:0:14:6 +O3PipeView:deps:0:15:2 O3PipeView:fetch:78500:0x00010144:0:1:auipc a0, 1:IntAlu O3PipeView:decode:79000 O3PipeView:rename:79500 @@ -5,6 +16,30 @@ O3PipeView:dispatch:80500 O3PipeView:issue:80500 O3PipeView:complete:81000 O3PipeView:retire:82000:store:0 +O3PipeView:deps:0:16:4 +O3PipeView:deps:0:17:6 +O3PipeView:deps:0:19:18 +O3PipeView:deps:0:21:20 +O3PipeView:memdeps:0:21:14 +O3PipeView:deps:0:23:22 +O3PipeView:memdeps:0:23:14 +O3PipeView:deps:0:25:21 +O3PipeView:memdeps:0:25:14 +O3PipeView:deps:0:26:23 +O3PipeView:memdeps:0:26:14 +O3PipeView:deps:0:27:25,26 +O3PipeView:deps:0:28:25,26 +O3PipeView:deps:0:29:17,12 +O3PipeView:deps:0:30:21 +O3PipeView:deps:0:31:23 +O3PipeView:memdeps:0:32:14 +O3PipeView:deps:0:33:16 +O3PipeView:memdeps:0:33:14 +O3PipeView:deps:0:34:32,33 +O3PipeView:deps:0:35:32,33 +O3PipeView:deps:0:36:32,33 +O3PipeView:deps:0:37:32,33 +O3PipeView:deps:0:38:17 O3PipeView:fetch:78500:0x0001014c:0:3:auipc a1, 1:IntAlu O3PipeView:decode:79000 O3PipeView:rename:79500 @@ -12,13 +47,29 @@ O3PipeView:dispatch:80500 O3PipeView:issue:80500 O3PipeView:complete:81000 O3PipeView:retire:137000:store:0 -O3PipeView:fetch:78500:0x00010148:0:2:ld a0, 548(a0):MemRead +O3PipeView:deps:0:40:16 +O3PipeView:deps:0:41:17 +O3PipeView:deps:0:43:42 +O3PipeView:deps:0:45:44 +O3PipeView:memdeps:0:45:38,14 +O3PipeView:deps:0:47:46 +O3PipeView:memdeps:0:47:38,14 +O3PipeView:fetch:78500:0x00010148:0:2:ld a0, 532(a0):MemRead O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 O3PipeView:issue:81000 O3PipeView:complete:81500 O3PipeView:retire:137000:store:0 +O3PipeView:deps:0:49:45 +O3PipeView:memdeps:0:49:38,14 +O3PipeView:deps:0:50:47 +O3PipeView:memdeps:0:50:38,14 +O3PipeView:deps:0:51:49,50 +O3PipeView:deps:0:52:49,50 +O3PipeView:deps:0:53:41,36 +O3PipeView:deps:0:54:45 +O3PipeView:deps:0:55:47 O3PipeView:fetch:78500:0x00010154:0:5:auipc a2, 1:IntAlu O3PipeView:decode:79000 O3PipeView:rename:79500 @@ -33,20 +84,41 @@ O3PipeView:dispatch:80500 O3PipeView:issue:80500 O3PipeView:complete:81000 O3PipeView:retire:141500:store:0 -O3PipeView:fetch:78500:0x00010150:0:4:ld a1, 548(a1):MemRead +O3PipeView:fetch:78500:0x00010150:0:4:ld a1, 532(a1):MemRead O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 O3PipeView:issue:81000 O3PipeView:complete:81500 O3PipeView:retire:141000:store:0 -O3PipeView:fetch:78500:0x00010158:0:6:ld a2, 548(a2):MemRead +O3PipeView:fetch:78500:0x00010158:0:6:ld a2, 532(a2):MemRead O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 O3PipeView:issue:81000 O3PipeView:complete:81500 O3PipeView:retire:141500:store:0 +O3PipeView:deps:0:57:56 +O3PipeView:deps:0:59:58 +O3PipeView:memdeps:0:59:53 +O3PipeView:deps:0:61:60 +O3PipeView:memdeps:0:61:53 +O3PipeView:deps:0:63:62 +O3PipeView:memdeps:0:63:53 +O3PipeView:deps:0:65:59 +O3PipeView:memdeps:0:65:53 +O3PipeView:deps:0:66:61 +O3PipeView:memdeps:0:66:53 +O3PipeView:deps:0:67:65,66 +O3PipeView:deps:0:68:65,66 +O3PipeView:deps:0:69:65,66 +O3PipeView:deps:0:70:63,67 +O3PipeView:deps:0:71:63 +O3PipeView:memdeps:0:72:53 +O3PipeView:memdeps:0:73:53 +O3PipeView:deps:0:74:72,73 +O3PipeView:deps:0:75:72,73 +O3PipeView:deps:0:76:36 O3PipeView:fetch:78500:0x00010160:0:8:lw a4, 0(a0):MemRead O3PipeView:decode:79000 O3PipeView:rename:79500 @@ -54,1284 +126,1409 @@ O3PipeView:dispatch:80500 O3PipeView:issue:136000 O3PipeView:complete:136500 O3PipeView:retire:189000:store:0 -O3PipeView:fetch:79000:0x00010164:0:9:lw a5, 0(a1):MemRead +O3PipeView:deps:0:80:79 +O3PipeView:deps:0:82:81 +O3PipeView:memdeps:0:82:76,53 +O3PipeView:deps:0:84:83 +O3PipeView:memdeps:0:84:76,53 +O3PipeView:deps:0:86:85 +O3PipeView:memdeps:0:86:76,53 +O3PipeView:deps:0:88:82 +O3PipeView:memdeps:0:88:76,53 +O3PipeView:deps:0:89:84 +O3PipeView:memdeps:0:89:76,53 +O3PipeView:deps:0:90:88,89 +O3PipeView:deps:0:91:88,89 +O3PipeView:deps:0:92:88,89 +O3PipeView:deps:0:93:86,90 +O3PipeView:deps:0:94:86 +O3PipeView:fetch:79000:0x0001017c:0:15:addi a0, a0, 4:IntAlu O3PipeView:decode:79500 O3PipeView:rename:80000 O3PipeView:dispatch:81000 +O3PipeView:issue:136000 +O3PipeView:complete:136500 +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:130000:0x00010180:0:16:addi a1, a1, 4:IntAlu +O3PipeView:decode:130500 +O3PipeView:rename:131000 +O3PipeView:dispatch:132000 O3PipeView:issue:140000 O3PipeView:complete:140500 -O3PipeView:retire:193500:store:0 -O3PipeView:fetch:130000:0x00010194:0:21:auipc a0, 1:IntAlu +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:130000:0x00010184:0:17:addi a2, a2, 4:IntAlu +O3PipeView:decode:130500 +O3PipeView:rename:131000 +O3PipeView:dispatch:132000 +O3PipeView:issue:140500 +O3PipeView:complete:141000 +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:130000:0x00010190:0:20:auipc a0, 1:IntAlu O3PipeView:decode:130500 O3PipeView:rename:131000 O3PipeView:dispatch:132000 O3PipeView:issue:132000 O3PipeView:complete:132500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130000:0x00010198:0:22:ld a0, 468(a0):MemRead +O3PipeView:fetch:130000:0x00010194:0:21:ld a0, 456(a0):MemRead O3PipeView:decode:130500 O3PipeView:rename:131000 O3PipeView:dispatch:132000 O3PipeView:issue:132500 O3PipeView:complete:133000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130000:0x0001019c:0:23:auipc a1, 1:IntAlu +O3PipeView:fetch:130000:0x00010198:0:22:auipc a1, 1:IntAlu O3PipeView:decode:130500 O3PipeView:rename:131000 O3PipeView:dispatch:132000 O3PipeView:issue:132000 O3PipeView:complete:132500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101a0:0:24:ld a1, 468(a1):MemRead +O3PipeView:fetch:130000:0x0001019c:0:23:ld a1, 456(a1):MemRead +O3PipeView:decode:130500 +O3PipeView:rename:131000 +O3PipeView:dispatch:132000 +O3PipeView:issue:132500 +O3PipeView:complete:133000 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:130500:0x000101a0:0:24:addi a3, zero, 2:IntAlu O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:132500 O3PipeView:complete:133000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101a4:0:25:addi a3, zero, 2:IntAlu +O3PipeView:fetch:130500:0x000101a4:0:25:lw a4, 0(a0):MemRead O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 -O3PipeView:issue:132500 -O3PipeView:complete:133000 +O3PipeView:issue:0 +O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101a8:0:26:lw a4, 0(a0):MemRead +O3PipeView:fetch:130500:0x000101a8:0:26:lw a5, 0(a1):MemRead O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101ac:0:27:lw a5, 0(a1):MemRead +O3PipeView:fetch:130500:0x000101ac:0:27:mul a6, a4, a5:IntMult O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101b0:0:28:mul a6, a4, a5:IntMult +O3PipeView:fetch:130500:0x000101b0:0:28:div a7, a4, a5:IntDiv O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101b4:0:29:div a7, a4, a5:IntDiv +O3PipeView:fetch:130500:0x000101b4:0:29:sw s2, 0(a2):MemWrite O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101b8:0:30:add s2, a6, a7:IntAlu +O3PipeView:fetch:130500:0x000101b8:0:30:addi a0, a0, 4:IntAlu O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130500:0x000101bc:0:31:sw s2, 0(a2):MemWrite +O3PipeView:fetch:130500:0x000101bc:0:31:addi a1, a1, 4:IntAlu O3PipeView:decode:131000 O3PipeView:rename:131500 O3PipeView:dispatch:132500 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:130000:0x00010180:0:16:addi a0, a0, 4:IntAlu -O3PipeView:decode:130500 -O3PipeView:rename:131000 -O3PipeView:dispatch:132000 -O3PipeView:issue:136000 -O3PipeView:complete:136500 -O3PipeView:retire:195000:store:0 -O3PipeView:fetch:130000:0x00010184:0:17:addi a1, a1, 4:IntAlu -O3PipeView:decode:130500 -O3PipeView:rename:131000 -O3PipeView:dispatch:132000 -O3PipeView:issue:140000 -O3PipeView:complete:140500 -O3PipeView:retire:195000:store:0 -O3PipeView:fetch:130000:0x00010188:0:18:addi a2, a2, 4:IntAlu -O3PipeView:decode:130500 -O3PipeView:rename:131000 -O3PipeView:dispatch:132000 -O3PipeView:issue:140500 -O3PipeView:complete:141000 -O3PipeView:retire:195000:store:0 -O3PipeView:fetch:130000:0x0001018c:0:19:addi a3, a3, -1:IntAlu +O3PipeView:fetch:130000:0x00010188:0:18:addi a3, a3, -1:IntAlu O3PipeView:decode:130500 O3PipeView:rename:131000 O3PipeView:dispatch:132000 O3PipeView:issue:132000 O3PipeView:complete:132500 -O3PipeView:retire:195000:store:0 -O3PipeView:fetch:130000:0x00010190:0:20:bne a3, zero, -48:IntAlu +O3PipeView:retire:194500:store:0 +O3PipeView:fetch:130000:0x0001018c:0:19:bne a3, zero, -44:IntAlu O3PipeView:decode:130500 O3PipeView:rename:131000 O3PipeView:dispatch:132000 O3PipeView:issue:132500 O3PipeView:complete:133000 -O3PipeView:retire:195000:store:0 +O3PipeView:retire:194500:store:0 O3PipeView:fetch:135500:0x00010160:0:32:lw a4, 0(a0):MemRead O3PipeView:decode:136000 O3PipeView:rename:136500 O3PipeView:dispatch:137500 O3PipeView:issue:137500 O3PipeView:complete:138000 -O3PipeView:retire:195000:store:0 +O3PipeView:retire:194500:store:0 O3PipeView:fetch:135500:0x00010164:0:33:lw a5, 0(a1):MemRead O3PipeView:decode:136000 O3PipeView:rename:136500 O3PipeView:dispatch:137500 O3PipeView:issue:140500 O3PipeView:complete:141000 -O3PipeView:retire:195000:store:0 -O3PipeView:fetch:79000:0x00010174:0:13:or s3, a4, a5:IntAlu -O3PipeView:decode:79500 -O3PipeView:rename:80000 -O3PipeView:dispatch:81000 -O3PipeView:issue:192500 -O3PipeView:complete:193000 -O3PipeView:retire:194000:store:0 -O3PipeView:fetch:79000:0x00010170:0:12:and s2, a4, a5:IntAlu -O3PipeView:decode:79500 -O3PipeView:rename:80000 -O3PipeView:dispatch:81000 -O3PipeView:issue:192500 -O3PipeView:complete:193000 -O3PipeView:retire:194000:store:0 -O3PipeView:fetch:79000:0x0001016c:0:11:sub a7, a4, a5:IntAlu -O3PipeView:decode:79500 -O3PipeView:rename:80000 -O3PipeView:dispatch:81000 -O3PipeView:issue:192500 -O3PipeView:complete:193000 -O3PipeView:retire:194000:store:0 -O3PipeView:fetch:79000:0x00010168:0:10:add a6, a4, a5:IntAlu +O3PipeView:retire:194500:store:0 +O3PipeView:fetch:79000:0x00010164:0:9:lw a5, 0(a1):MemRead O3PipeView:decode:79500 O3PipeView:rename:80000 O3PipeView:dispatch:81000 -O3PipeView:issue:192500 -O3PipeView:complete:193000 -O3PipeView:retire:194000:store:0 -O3PipeView:fetch:135500:0x00010168:0:34:add a6, a4, a5:IntAlu -O3PipeView:decode:136000 -O3PipeView:rename:136500 -O3PipeView:dispatch:137500 -O3PipeView:issue:192500 -O3PipeView:complete:193000 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:135500:0x0001016c:0:35:sub a7, a4, a5:IntAlu +O3PipeView:issue:140000 +O3PipeView:complete:140500 +O3PipeView:retire:193500:store:0 +O3PipeView:fetch:135500:0x0001017c:0:39:addi a0, a0, 4:IntAlu O3PipeView:decode:136000 O3PipeView:rename:136500 O3PipeView:dispatch:137500 -O3PipeView:issue:192500 -O3PipeView:complete:193000 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:136500:0x00010180:0:40:addi a0, a0, 4:IntAlu -O3PipeView:decode:137000 -O3PipeView:rename:137500 -O3PipeView:dispatch:138500 -O3PipeView:issue:138500 -O3PipeView:complete:139000 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:136500:0x00010184:0:41:addi a1, a1, 4:IntAlu +O3PipeView:issue:137500 +O3PipeView:complete:138000 +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:136500:0x00010180:0:40:addi a1, a1, 4:IntAlu O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:140500 O3PipeView:complete:141000 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:135500:0x00010178:0:38:add s4, a6, a7:IntAlu -O3PipeView:decode:136000 -O3PipeView:rename:136500 -O3PipeView:dispatch:137500 -O3PipeView:issue:193000 -O3PipeView:complete:193500 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:135500:0x00010174:0:37:or s3, a4, a5:IntAlu -O3PipeView:decode:136000 -O3PipeView:rename:136500 -O3PipeView:dispatch:137500 -O3PipeView:issue:193000 -O3PipeView:complete:193500 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:135500:0x00010170:0:36:and s2, a4, a5:IntAlu -O3PipeView:decode:136000 -O3PipeView:rename:136500 -O3PipeView:dispatch:137500 -O3PipeView:issue:193000 -O3PipeView:complete:193500 -O3PipeView:retire:195500:store:0 -O3PipeView:fetch:79000:0x00010178:0:14:add s4, a6, a7:IntAlu -O3PipeView:decode:79500 -O3PipeView:rename:80000 -O3PipeView:dispatch:81000 -O3PipeView:issue:193000 -O3PipeView:complete:193500 -O3PipeView:retire:194500:store:0 -O3PipeView:fetch:136500:0x00010188:0:42:addi a2, a2, 4:IntAlu +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:136500:0x00010184:0:41:addi a2, a2, 4:IntAlu O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:141000 O3PipeView:complete:141500 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:136500:0x0001018c:0:43:addi a3, a3, -1:IntAlu +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:136500:0x00010188:0:42:addi a3, a3, -1:IntAlu O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:138500 O3PipeView:complete:139000 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:136500:0x00010190:0:44:bne a3, zero, -48:IntAlu +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:136500:0x0001018c:0:43:bne a3, zero, -44:IntAlu O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:139000 O3PipeView:complete:139500 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:136500:0x00010194:0:45:auipc a0, 1:IntAlu +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:136500:0x00010190:0:44:auipc a0, 1:IntAlu O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:138500 O3PipeView:complete:139000 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:136500:0x00010198:0:46:ld a0, 468(a0):MemRead +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:136500:0x00010194:0:45:ld a0, 456(a0):MemRead O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:139000 O3PipeView:complete:139500 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:136500:0x0001019c:0:47:auipc a1, 1:IntAlu +O3PipeView:retire:195000:store:0 +O3PipeView:fetch:135500:0x0001016c:0:35:sub a7, a4, a5:IntAlu +O3PipeView:decode:136000 +O3PipeView:rename:136500 +O3PipeView:dispatch:137500 +O3PipeView:issue:192500 +O3PipeView:complete:193000 +O3PipeView:retire:194500:store:0 +O3PipeView:fetch:135500:0x00010168:0:34:add a6, a4, a5:IntAlu +O3PipeView:decode:136000 +O3PipeView:rename:136500 +O3PipeView:dispatch:137500 +O3PipeView:issue:192500 +O3PipeView:complete:193000 +O3PipeView:retire:194500:store:0 +O3PipeView:fetch:79000:0x00010174:0:13:or s3, a4, a5:IntAlu +O3PipeView:decode:79500 +O3PipeView:rename:80000 +O3PipeView:dispatch:81000 +O3PipeView:issue:192500 +O3PipeView:complete:193000 +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:79000:0x00010170:0:12:and s2, a4, a5:IntAlu +O3PipeView:decode:79500 +O3PipeView:rename:80000 +O3PipeView:dispatch:81000 +O3PipeView:issue:192500 +O3PipeView:complete:193000 +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:79000:0x0001016c:0:11:sub a7, a4, a5:IntAlu +O3PipeView:decode:79500 +O3PipeView:rename:80000 +O3PipeView:dispatch:81000 +O3PipeView:issue:192500 +O3PipeView:complete:193000 +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:79000:0x00010168:0:10:add a6, a4, a5:IntAlu +O3PipeView:decode:79500 +O3PipeView:rename:80000 +O3PipeView:dispatch:81000 +O3PipeView:issue:192500 +O3PipeView:complete:193000 +O3PipeView:retire:194000:store:0 +O3PipeView:fetch:136500:0x00010198:0:46:auipc a1, 1:IntAlu O3PipeView:decode:137000 O3PipeView:rename:137500 O3PipeView:dispatch:138500 O3PipeView:issue:138500 O3PipeView:complete:139000 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:137000:0x000101a0:0:48:ld a1, 468(a1):MemRead -O3PipeView:decode:137500 -O3PipeView:rename:138000 -O3PipeView:dispatch:139000 +O3PipeView:retire:195500:store:0 +O3PipeView:fetch:136500:0x0001019c:0:47:ld a1, 456(a1):MemRead +O3PipeView:decode:137000 +O3PipeView:rename:137500 +O3PipeView:dispatch:138500 O3PipeView:issue:139000 O3PipeView:complete:139500 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:137000:0x000101a4:0:49:addi a3, zero, 2:IntAlu +O3PipeView:retire:195500:store:0 +O3PipeView:fetch:137000:0x000101a0:0:48:addi a3, zero, 2:IntAlu O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 O3PipeView:issue:139000 O3PipeView:complete:139500 -O3PipeView:retire:196000:store:0 -O3PipeView:fetch:79000:0x0001017c:0:15:sw s4, 0(a2):MemWrite -O3PipeView:decode:79500 -O3PipeView:rename:80000 -O3PipeView:dispatch:81000 -O3PipeView:issue:193500 -O3PipeView:complete:194000 -O3PipeView:retire:195000:store:197000 -O3PipeView:fetch:137000:0x000101a8:0:50:lw a4, 0(a0):MemRead +O3PipeView:retire:195500:store:0 +O3PipeView:fetch:137000:0x000101a4:0:49:lw a4, 0(a0):MemRead O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 O3PipeView:issue:140500 O3PipeView:complete:141000 -O3PipeView:retire:196500:store:0 -O3PipeView:fetch:137000:0x000101ac:0:51:lw a5, 0(a1):MemRead +O3PipeView:retire:195500:store:0 +O3PipeView:fetch:137000:0x000101a8:0:50:lw a5, 0(a1):MemRead O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 O3PipeView:issue:141000 O3PipeView:complete:141500 -O3PipeView:retire:196500:store:0 -O3PipeView:fetch:137000:0x000101b0:0:52:mul a6, a4, a5:IntMult +O3PipeView:retire:195500:store:0 +O3PipeView:fetch:135500:0x00010174:0:37:or s3, a4, a5:IntAlu +O3PipeView:decode:136000 +O3PipeView:rename:136500 +O3PipeView:dispatch:137500 +O3PipeView:issue:193000 +O3PipeView:complete:193500 +O3PipeView:retire:194500:store:0 +O3PipeView:fetch:135500:0x00010170:0:36:and s2, a4, a5:IntAlu +O3PipeView:decode:136000 +O3PipeView:rename:136500 +O3PipeView:dispatch:137500 +O3PipeView:issue:193000 +O3PipeView:complete:193500 +O3PipeView:retire:194500:store:0 +O3PipeView:fetch:137000:0x000101ac:0:51:mul a6, a4, a5:IntMult O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 O3PipeView:issue:192500 O3PipeView:complete:194000 -O3PipeView:retire:196500:store:0 -O3PipeView:fetch:135500:0x0001017c:0:39:sw s4, 0(a2):MemWrite -O3PipeView:decode:136000 -O3PipeView:rename:136500 -O3PipeView:dispatch:137500 -O3PipeView:issue:193500 -O3PipeView:complete:194000 -O3PipeView:retire:195500:store:197500 -O3PipeView:fetch:182500:0x000101d0:0:60:auipc a0, 1:IntAlu +O3PipeView:retire:195500:store:0 +O3PipeView:fetch:182500:0x000101c8:0:58:auipc a0, 1:IntAlu O3PipeView:decode:183000 O3PipeView:rename:183500 O3PipeView:dispatch:184500 O3PipeView:issue:184500 O3PipeView:complete:185000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:182500:0x000101d8:0:62:auipc a1, 1:IntAlu +O3PipeView:fetch:182500:0x000101cc:0:59:ld a0, 424(a0):MemRead +O3PipeView:decode:183000 +O3PipeView:rename:183500 +O3PipeView:dispatch:184500 +O3PipeView:issue:185000 +O3PipeView:complete:185500 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:182500:0x000101d0:0:60:auipc a1, 1:IntAlu O3PipeView:decode:183000 O3PipeView:rename:183500 O3PipeView:dispatch:184500 O3PipeView:issue:184500 O3PipeView:complete:185000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101e0:0:64:auipc a2, 1:IntAlu +O3PipeView:fetch:182500:0x000101d4:0:61:ld a1, 424(a1):MemRead +O3PipeView:decode:183000 +O3PipeView:rename:183500 +O3PipeView:dispatch:184500 +O3PipeView:issue:185000 +O3PipeView:complete:185500 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:182500:0x000101d8:0:62:auipc a2, 1:IntAlu +O3PipeView:decode:183000 +O3PipeView:rename:183500 +O3PipeView:dispatch:184500 +O3PipeView:issue:184500 +O3PipeView:complete:185000 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:183000:0x000101e0:0:64:addi a3, zero, 2:IntAlu O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 O3PipeView:issue:185000 O3PipeView:complete:185500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101e8:0:66:addi a3, zero, 2:IntAlu +O3PipeView:fetch:183000:0x000101e4:0:65:flw ft0, 0(a0):FloatMemRead O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 -O3PipeView:issue:185000 -O3PipeView:complete:185500 +O3PipeView:issue:0 +O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101ec:0:67:flw ft0, 0(a0):FloatMemRead +O3PipeView:fetch:183000:0x000101e8:0:66:flw ft1, 0(a1):FloatMemRead O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101f0:0:68:flw ft1, 0(a1):FloatMemRead +O3PipeView:fetch:183000:0x000101ec:0:67:fadd_s ft2, ft0, ft1:FloatAdd O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101f4:0:69:fadd_s ft2, ft0, ft1:FloatAdd +O3PipeView:fetch:183000:0x000101f0:0:68:fsub_s ft3, ft0, ft1:FloatAdd O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101f8:0:70:fsub_s ft3, ft0, ft1:FloatAdd +O3PipeView:fetch:183000:0x000101f4:0:69:feq_s a4, ft0, ft1:FloatCmp O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101fc:0:71:feq_s a4, ft0, ft1:FloatCmp +O3PipeView:fetch:183000:0x000101f8:0:70:fsw ft2, 0(a2):FloatMemWrite O3PipeView:decode:183500 O3PipeView:rename:184000 O3PipeView:dispatch:185000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:182500:0x000101c0:0:56:addi a0, a0, 4:IntAlu -O3PipeView:decode:183000 -O3PipeView:rename:183500 -O3PipeView:dispatch:184500 -O3PipeView:issue:184500 -O3PipeView:complete:185000 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:182500:0x000101c4:0:57:addi a1, a1, 4:IntAlu -O3PipeView:decode:183000 -O3PipeView:rename:183500 -O3PipeView:dispatch:184500 -O3PipeView:issue:184500 -O3PipeView:complete:185000 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:182500:0x000101c8:0:58:addi a3, a3, -1:IntAlu +O3PipeView:fetch:183000:0x000101fc:0:71:addi a2, a2, 4:IntAlu +O3PipeView:decode:183500 +O3PipeView:rename:184000 +O3PipeView:dispatch:185000 +O3PipeView:issue:0 +O3PipeView:complete:0 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:137000:0x000101b8:0:54:addi a0, a0, 4:IntAlu +O3PipeView:decode:137500 +O3PipeView:rename:138000 +O3PipeView:dispatch:139000 +O3PipeView:issue:140500 +O3PipeView:complete:141000 +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:137000:0x000101bc:0:55:addi a1, a1, 4:IntAlu +O3PipeView:decode:137500 +O3PipeView:rename:138000 +O3PipeView:dispatch:139000 +O3PipeView:issue:141000 +O3PipeView:complete:141500 +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:182500:0x000101c0:0:56:addi a3, a3, -1:IntAlu O3PipeView:decode:183000 O3PipeView:rename:183500 O3PipeView:dispatch:184500 O3PipeView:issue:184500 O3PipeView:complete:185000 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:182500:0x000101cc:0:59:bne a3, zero, -36:IntAlu +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:182500:0x000101c4:0:57:bne a3, zero, -32:IntAlu O3PipeView:decode:183000 O3PipeView:rename:183500 O3PipeView:dispatch:184500 O3PipeView:issue:185000 O3PipeView:complete:185500 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:188000:0x000101a8:0:72:lw a4, 0(a0):MemRead +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:188000:0x000101a4:0:72:lw a4, 0(a0):MemRead O3PipeView:decode:188500 O3PipeView:rename:189000 O3PipeView:dispatch:190000 O3PipeView:issue:190000 O3PipeView:complete:190500 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:188000:0x000101ac:0:73:lw a5, 0(a1):MemRead +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:188000:0x000101a8:0:73:lw a5, 0(a1):MemRead O3PipeView:decode:188500 O3PipeView:rename:189000 O3PipeView:dispatch:190000 O3PipeView:issue:190000 O3PipeView:complete:190500 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:188000:0x000101b0:0:74:mul a6, a4, a5:IntMult +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:188000:0x000101ac:0:74:mul a6, a4, a5:IntMult O3PipeView:decode:188500 O3PipeView:rename:189000 O3PipeView:dispatch:190000 O3PipeView:issue:193500 O3PipeView:complete:195000 -O3PipeView:retire:204500:store:0 -O3PipeView:fetch:137000:0x000101b4:0:53:div a7, a4, a5:IntDiv -O3PipeView:decode:137500 -O3PipeView:rename:138000 -O3PipeView:dispatch:139000 -O3PipeView:issue:192500 -O3PipeView:complete:202500 O3PipeView:retire:203500:store:0 -O3PipeView:fetch:137000:0x000101b8:0:54:add s2, a6, a7:IntAlu -O3PipeView:decode:137500 -O3PipeView:rename:138000 -O3PipeView:dispatch:139000 -O3PipeView:issue:202500 -O3PipeView:complete:203000 -O3PipeView:retire:204000:store:0 -O3PipeView:fetch:137000:0x000101bc:0:55:sw s2, 0(a2):MemWrite +O3PipeView:fetch:137000:0x000101b0:0:52:div a7, a4, a5:IntDiv O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 -O3PipeView:issue:203000 -O3PipeView:complete:203500 -O3PipeView:retire:204500:store:206500 -O3PipeView:fetch:189000:0x000101c0:0:78:addi a0, a0, 4:IntAlu +O3PipeView:issue:192500 +O3PipeView:complete:202000 +O3PipeView:retire:203000:store:0 +O3PipeView:fetch:188000:0x000101b8:0:77:addi a0, a0, 4:IntAlu +O3PipeView:decode:188500 +O3PipeView:rename:189000 +O3PipeView:dispatch:190000 +O3PipeView:issue:190000 +O3PipeView:complete:190500 +O3PipeView:retire:205000:store:0 +O3PipeView:fetch:188000:0x000101bc:0:78:addi a1, a1, 4:IntAlu +O3PipeView:decode:188500 +O3PipeView:rename:189000 +O3PipeView:dispatch:190000 +O3PipeView:issue:190000 +O3PipeView:complete:190500 +O3PipeView:retire:205000:store:0 +O3PipeView:fetch:189000:0x000101c0:0:79:addi a3, a3, -1:IntAlu O3PipeView:decode:189500 O3PipeView:rename:190000 O3PipeView:dispatch:191000 O3PipeView:issue:191000 O3PipeView:complete:191500 -O3PipeView:retire:206000:store:0 -O3PipeView:fetch:189000:0x000101c4:0:79:addi a1, a1, 4:IntAlu +O3PipeView:retire:205000:store:0 +O3PipeView:fetch:189000:0x000101c4:0:80:bne a3, zero, -32:IntAlu +O3PipeView:decode:189500 +O3PipeView:rename:190000 +O3PipeView:dispatch:191000 +O3PipeView:issue:191500 +O3PipeView:complete:192000 +O3PipeView:retire:205000:store:0 +O3PipeView:fetch:189000:0x000101c8:0:81:auipc a0, 1:IntAlu O3PipeView:decode:189500 O3PipeView:rename:190000 O3PipeView:dispatch:191000 O3PipeView:issue:191000 O3PipeView:complete:191500 -O3PipeView:retire:206000:store:0 -O3PipeView:fetch:189000:0x000101c8:0:80:addi a3, a3, -1:IntAlu +O3PipeView:retire:205000:store:0 +O3PipeView:fetch:189000:0x000101cc:0:82:ld a0, 424(a0):MemRead +O3PipeView:decode:189500 +O3PipeView:rename:190000 +O3PipeView:dispatch:191000 +O3PipeView:issue:191500 +O3PipeView:complete:192000 +O3PipeView:retire:205000:store:0 +O3PipeView:fetch:189000:0x000101d0:0:83:auipc a1, 1:IntAlu O3PipeView:decode:189500 O3PipeView:rename:190000 O3PipeView:dispatch:191000 O3PipeView:issue:191000 O3PipeView:complete:191500 -O3PipeView:retire:206000:store:0 -O3PipeView:fetch:189000:0x000101cc:0:81:bne a3, zero, -36:IntAlu +O3PipeView:retire:205500:store:0 +O3PipeView:fetch:189000:0x000101d4:0:84:ld a1, 424(a1):MemRead O3PipeView:decode:189500 O3PipeView:rename:190000 O3PipeView:dispatch:191000 O3PipeView:issue:191500 O3PipeView:complete:192000 -O3PipeView:retire:206000:store:0 -O3PipeView:fetch:189000:0x000101d0:0:82:auipc a0, 1:IntAlu +O3PipeView:retire:205500:store:0 +O3PipeView:fetch:189000:0x000101d8:0:85:auipc a2, 1:IntAlu O3PipeView:decode:189500 O3PipeView:rename:190000 O3PipeView:dispatch:191000 O3PipeView:issue:191000 O3PipeView:complete:191500 -O3PipeView:retire:206000:store:0 -O3PipeView:fetch:188000:0x000101b4:0:75:div a7, a4, a5:IntDiv +O3PipeView:retire:205500:store:0 +O3PipeView:fetch:188000:0x000101b0:0:75:div a7, a4, a5:IntDiv O3PipeView:decode:188500 O3PipeView:rename:189000 O3PipeView:dispatch:190000 O3PipeView:issue:194000 O3PipeView:complete:204000 O3PipeView:retire:205000:store:0 -O3PipeView:fetch:188000:0x000101b8:0:76:add s2, a6, a7:IntAlu -O3PipeView:decode:188500 -O3PipeView:rename:189000 -O3PipeView:dispatch:190000 -O3PipeView:issue:204000 -O3PipeView:complete:204500 -O3PipeView:retire:205500:store:0 -O3PipeView:fetch:188000:0x000101bc:0:77:sw s2, 0(a2):MemWrite -O3PipeView:decode:188500 -O3PipeView:rename:189000 -O3PipeView:dispatch:190000 -O3PipeView:issue:204500 -O3PipeView:complete:205000 -O3PipeView:retire:206000:store:208000 -O3PipeView:fetch:182500:0x000101d4:0:61:ld a0, 432(a0):MemRead +O3PipeView:deps:0:95:94,91 +O3PipeView:deps:0:96:94 +O3PipeView:deps:0:100:99 +O3PipeView:deps:0:102:101 +O3PipeView:memdeps:0:102:95,93 +O3PipeView:deps:0:104:103 +O3PipeView:memdeps:0:104:95,93 +O3PipeView:deps:0:106:105 +O3PipeView:memdeps:0:106:95,93 +O3PipeView:deps:0:108:102 +O3PipeView:memdeps:0:108:95,93 +O3PipeView:deps:0:109:104 +O3PipeView:memdeps:0:109:95,93 +O3PipeView:deps:0:110:108,109 +O3PipeView:fetch:182500:0x000101dc:0:63:ld a2, 424(a2):MemRead O3PipeView:decode:183000 O3PipeView:rename:183500 O3PipeView:dispatch:184500 O3PipeView:issue:185000 O3PipeView:complete:185500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:189000:0x000101d8:0:84:auipc a1, 1:IntAlu -O3PipeView:decode:189500 -O3PipeView:rename:190000 -O3PipeView:dispatch:191000 -O3PipeView:issue:191000 -O3PipeView:complete:191500 -O3PipeView:retire:241500:store:0 -O3PipeView:fetch:189000:0x000101d4:0:83:ld a0, 432(a0):MemRead -O3PipeView:decode:189500 -O3PipeView:rename:190000 -O3PipeView:dispatch:191000 -O3PipeView:issue:191500 -O3PipeView:complete:192000 -O3PipeView:retire:241500:store:0 -O3PipeView:fetch:182500:0x000101dc:0:63:ld a1, 432(a1):MemRead -O3PipeView:decode:183000 -O3PipeView:rename:183500 -O3PipeView:dispatch:184500 -O3PipeView:issue:185000 -O3PipeView:complete:185500 -O3PipeView:retire:0:store:0 -O3PipeView:fetch:183000:0x000101e4:0:65:ld a2, 432(a2):MemRead -O3PipeView:decode:183500 -O3PipeView:rename:184000 -O3PipeView:dispatch:185000 -O3PipeView:issue:185500 -O3PipeView:complete:186000 -O3PipeView:retire:0:store:0 -O3PipeView:fetch:189500:0x000101e0:0:86:auipc a2, 1:IntAlu +O3PipeView:memdeps:0:111:95,93 +O3PipeView:memdeps:0:112:95,93 +O3PipeView:deps:0:113:111,112 +O3PipeView:deps:0:114:111,112 +O3PipeView:deps:0:115:111,112 +O3PipeView:deps:0:116:113 +O3PipeView:fetch:189500:0x000101e0:0:87:addi a3, zero, 2:IntAlu O3PipeView:decode:190000 O3PipeView:rename:190500 O3PipeView:dispatch:191500 O3PipeView:issue:191500 O3PipeView:complete:192000 -O3PipeView:retire:245500:store:0 -O3PipeView:fetch:189500:0x000101e8:0:88:addi a3, zero, 2:IntAlu -O3PipeView:decode:190000 -O3PipeView:rename:190500 -O3PipeView:dispatch:191500 +O3PipeView:retire:241500:store:0 +O3PipeView:deps:0:118:114 +O3PipeView:deps:0:123:122 +O3PipeView:deps:0:125:124 +O3PipeView:memdeps:0:125:118,116,95,93 +O3PipeView:fetch:189000:0x000101dc:0:86:ld a2, 424(a2):MemRead +O3PipeView:decode:189500 +O3PipeView:rename:190000 +O3PipeView:dispatch:191000 O3PipeView:issue:191500 O3PipeView:complete:192000 -O3PipeView:retire:245500:store:0 -O3PipeView:fetch:189500:0x000101ec:0:89:flw ft0, 0(a0):FloatMemRead +O3PipeView:retire:241500:store:0 +O3PipeView:deps:0:127:126 +O3PipeView:memdeps:0:127:118,116,95,93 +O3PipeView:deps:0:129:128 +O3PipeView:memdeps:0:129:118,116,95,93 +O3PipeView:deps:0:131:125 +O3PipeView:memdeps:0:131:118,116,95,93 +O3PipeView:deps:0:132:127 +O3PipeView:memdeps:0:132:118,116,95,93 +O3PipeView:deps:0:133:131,132 +O3PipeView:fetch:189500:0x000101e4:0:88:flw ft0, 0(a0):FloatMemRead O3PipeView:decode:190000 O3PipeView:rename:190500 O3PipeView:dispatch:191500 -O3PipeView:issue:240500 -O3PipeView:complete:241000 -O3PipeView:retire:245500:store:0 -O3PipeView:fetch:189500:0x000101e4:0:87:ld a2, 432(a2):MemRead +O3PipeView:issue:193500 +O3PipeView:complete:194000 +O3PipeView:retire:246000:store:0 +O3PipeView:fetch:79000:0x00010178:0:14:sw s4, 0(a2):MemWrite +O3PipeView:decode:79500 +O3PipeView:rename:80000 +O3PipeView:dispatch:81000 +O3PipeView:issue:140500 +O3PipeView:complete:141000 +O3PipeView:retire:194000:store:249001 +O3PipeView:fetch:135500:0x00010178:0:38:sw s4, 0(a2):MemWrite +O3PipeView:decode:136000 +O3PipeView:rename:136500 +O3PipeView:dispatch:137500 +O3PipeView:issue:141000 +O3PipeView:complete:141500 +O3PipeView:retire:195000:store:249002 +O3PipeView:fetch:137000:0x000101b4:0:53:sw s2, 0(a2):MemWrite +O3PipeView:decode:137500 +O3PipeView:rename:138000 +O3PipeView:dispatch:139000 +O3PipeView:issue:193500 +O3PipeView:complete:194000 +O3PipeView:retire:203000:store:249003 +O3PipeView:fetch:188000:0x000101b4:0:76:sw s2, 0(a2):MemWrite +O3PipeView:decode:188500 +O3PipeView:rename:189000 +O3PipeView:dispatch:190000 +O3PipeView:issue:193500 +O3PipeView:complete:194000 +O3PipeView:retire:205000:store:249004 +O3PipeView:fetch:189500:0x000101e8:0:89:flw ft1, 0(a1):FloatMemRead O3PipeView:decode:190000 -O3PipeView:rename:190500 -O3PipeView:dispatch:191500 -O3PipeView:issue:192000 -O3PipeView:complete:192500 -O3PipeView:retire:245500:store:0 -O3PipeView:fetch:189000:0x000101dc:0:85:ld a1, 432(a1):MemRead -O3PipeView:decode:189500 -O3PipeView:rename:190000 -O3PipeView:dispatch:191000 -O3PipeView:issue:191500 -O3PipeView:complete:192000 -O3PipeView:retire:245500:store:0 -O3PipeView:fetch:189500:0x000101f0:0:90:flw ft1, 0(a1):FloatMemRead +O3PipeView:rename:190500 +O3PipeView:dispatch:191500 +O3PipeView:issue:193500 +O3PipeView:complete:194000 +O3PipeView:retire:250000:store:0 +O3PipeView:fetch:189500:0x000101fc:0:94:addi a2, a2, 4:IntAlu O3PipeView:decode:190000 O3PipeView:rename:190500 O3PipeView:dispatch:191500 -O3PipeView:issue:244500 -O3PipeView:complete:245000 -O3PipeView:retire:247000:store:0 -O3PipeView:fetch:234500:0x00010204:0:95:addi a2, a2, 4:IntAlu +O3PipeView:issue:240500 +O3PipeView:complete:241000 +O3PipeView:retire:251500:store:0 +O3PipeView:fetch:234500:0x00010204:0:96:addi a2, a2, 4:IntAlu +O3PipeView:decode:235000 +O3PipeView:rename:235500 +O3PipeView:dispatch:236500 +O3PipeView:issue:241000 +O3PipeView:complete:241500 +O3PipeView:retire:251500:store:0 +O3PipeView:fetch:234500:0x00010208:0:97:addi a0, a0, 4:IntAlu O3PipeView:decode:235000 O3PipeView:rename:235500 O3PipeView:dispatch:236500 -O3PipeView:issue:244500 -O3PipeView:complete:245000 -O3PipeView:retire:248500:store:0 -O3PipeView:fetch:234500:0x0001020c:0:97:addi a2, a2, 4:IntAlu +O3PipeView:issue:236500 +O3PipeView:complete:237000 +O3PipeView:retire:251500:store:0 +O3PipeView:fetch:234500:0x0001020c:0:98:addi a1, a1, 4:IntAlu O3PipeView:decode:235000 O3PipeView:rename:235500 O3PipeView:dispatch:236500 -O3PipeView:issue:245000 -O3PipeView:complete:245500 -O3PipeView:retire:248500:store:0 -O3PipeView:fetch:234500:0x00010210:0:98:addi a0, a0, 4:IntAlu +O3PipeView:issue:236500 +O3PipeView:complete:237000 +O3PipeView:retire:251500:store:0 +O3PipeView:fetch:234500:0x00010210:0:99:addi a3, a3, -1:IntAlu O3PipeView:decode:235000 O3PipeView:rename:235500 O3PipeView:dispatch:236500 -O3PipeView:issue:240500 -O3PipeView:complete:241000 -O3PipeView:retire:248500:store:0 -O3PipeView:fetch:234500:0x00010214:0:99:addi a1, a1, 4:IntAlu +O3PipeView:issue:236500 +O3PipeView:complete:237000 +O3PipeView:retire:251500:store:0 +O3PipeView:fetch:234500:0x00010214:0:100:bne a3, zero, -48:IntAlu O3PipeView:decode:235000 O3PipeView:rename:235500 O3PipeView:dispatch:236500 -O3PipeView:issue:244500 -O3PipeView:complete:245000 -O3PipeView:retire:248500:store:0 -O3PipeView:fetch:234500:0x00010218:0:100:addi a3, a3, -1:IntAlu +O3PipeView:issue:237000 +O3PipeView:complete:237500 +O3PipeView:retire:251500:store:0 +O3PipeView:fetch:234500:0x00010218:0:101:auipc a0, 1:IntAlu O3PipeView:decode:235000 O3PipeView:rename:235500 O3PipeView:dispatch:236500 O3PipeView:issue:236500 O3PipeView:complete:237000 -O3PipeView:retire:248500:store:0 -O3PipeView:fetch:234500:0x0001021c:0:101:bne a3, zero, -48:IntAlu +O3PipeView:retire:0:store:0 +O3PipeView:fetch:234500:0x0001021c:0:102:ld a0, 344(a0):MemRead O3PipeView:decode:235000 O3PipeView:rename:235500 O3PipeView:dispatch:236500 O3PipeView:issue:237000 O3PipeView:complete:237500 -O3PipeView:retire:248500:store:0 -O3PipeView:fetch:235000:0x00010220:0:102:auipc a0, 1:IntAlu +O3PipeView:retire:0:store:0 +O3PipeView:fetch:235000:0x00010220:0:103:auipc a1, 1:IntAlu O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 O3PipeView:issue:237000 O3PipeView:complete:237500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x00010224:0:103:ld a0, 352(a0):MemRead +O3PipeView:fetch:235000:0x00010224:0:104:ld a1, 344(a1):MemRead O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 O3PipeView:issue:237500 O3PipeView:complete:238000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x00010228:0:104:auipc a1, 1:IntAlu +O3PipeView:fetch:235000:0x00010228:0:105:auipc a2, 1:IntAlu O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 O3PipeView:issue:237000 O3PipeView:complete:237500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x0001022c:0:105:ld a1, 352(a1):MemRead +O3PipeView:fetch:235000:0x0001022c:0:106:ld a2, 344(a2):MemRead O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 O3PipeView:issue:237500 O3PipeView:complete:238000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x00010230:0:106:auipc a2, 1:IntAlu +O3PipeView:fetch:235000:0x00010230:0:107:addi a3, zero, 2:IntAlu O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 O3PipeView:issue:237000 O3PipeView:complete:237500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x00010234:0:107:ld a2, 352(a2):MemRead +O3PipeView:fetch:235000:0x00010234:0:108:flw ft0, 0(a0):FloatMemRead O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 -O3PipeView:issue:237500 -O3PipeView:complete:238000 +O3PipeView:issue:0 +O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x00010238:0:108:addi a3, zero, 2:IntAlu +O3PipeView:fetch:235000:0x00010238:0:109:flw ft1, 0(a1):FloatMemRead O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 -O3PipeView:issue:237000 -O3PipeView:complete:237500 +O3PipeView:issue:0 +O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:235000:0x0001023c:0:109:flw ft0, 0(a0):FloatMemRead +O3PipeView:fetch:235000:0x0001023c:0:110:fmul_s ft2, ft0, ft1:FloatMult O3PipeView:decode:235500 O3PipeView:rename:236000 O3PipeView:dispatch:237000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:240000:0x000101ec:0:110:flw ft0, 0(a0):FloatMemRead +O3PipeView:fetch:240000:0x000101e4:0:111:flw ft0, 0(a0):FloatMemRead O3PipeView:decode:240500 O3PipeView:rename:241000 O3PipeView:dispatch:242000 O3PipeView:issue:242000 O3PipeView:complete:242500 -O3PipeView:retire:249000:store:0 -O3PipeView:fetch:240000:0x000101f0:0:111:flw ft1, 0(a1):FloatMemRead +O3PipeView:retire:252000:store:0 +O3PipeView:fetch:240000:0x000101e8:0:112:flw ft1, 0(a1):FloatMemRead O3PipeView:decode:240500 O3PipeView:rename:241000 O3PipeView:dispatch:242000 -O3PipeView:issue:245000 -O3PipeView:complete:245500 -O3PipeView:retire:249000:store:0 -O3PipeView:fetch:241000:0x00010204:0:116:addi a2, a2, 4:IntAlu -O3PipeView:decode:241500 -O3PipeView:rename:242000 -O3PipeView:dispatch:243000 -O3PipeView:issue:245500 -O3PipeView:complete:246000 -O3PipeView:retire:249000:store:0 -O3PipeView:fetch:189500:0x000101f4:0:91:fadd_s ft2, ft0, ft1:FloatAdd +O3PipeView:issue:242000 +O3PipeView:complete:242500 +O3PipeView:retire:252000:store:0 +O3PipeView:fetch:240000:0x000101fc:0:117:addi a2, a2, 4:IntAlu +O3PipeView:decode:240500 +O3PipeView:rename:241000 +O3PipeView:dispatch:242000 +O3PipeView:issue:242000 +O3PipeView:complete:242500 +O3PipeView:retire:252000:store:0 +O3PipeView:fetch:189500:0x000101ec:0:90:fadd_s ft2, ft0, ft1:FloatAdd O3PipeView:decode:190000 O3PipeView:rename:190500 O3PipeView:dispatch:191500 -O3PipeView:issue:246000 -O3PipeView:complete:247000 -O3PipeView:retire:248000:store:0 -O3PipeView:fetch:189500:0x000101f8:0:92:fsub_s ft3, ft0, ft1:FloatAdd +O3PipeView:issue:249000 +O3PipeView:complete:250000 +O3PipeView:retire:251000:store:0 +O3PipeView:fetch:189500:0x000101f0:0:91:fsub_s ft3, ft0, ft1:FloatAdd O3PipeView:decode:190000 O3PipeView:rename:190500 O3PipeView:dispatch:191500 -O3PipeView:issue:246000 -O3PipeView:complete:247000 -O3PipeView:retire:248000:store:0 -O3PipeView:fetch:189500:0x000101fc:0:93:feq_s a4, ft0, ft1:FloatCmp +O3PipeView:issue:249000 +O3PipeView:complete:250000 +O3PipeView:retire:251000:store:0 +O3PipeView:fetch:189500:0x000101f4:0:92:feq_s a4, ft0, ft1:FloatCmp O3PipeView:decode:190000 O3PipeView:rename:190500 O3PipeView:dispatch:191500 -O3PipeView:issue:246000 -O3PipeView:complete:247000 -O3PipeView:retire:248000:store:0 -O3PipeView:fetch:241000:0x0001020c:0:118:addi a2, a2, 4:IntAlu +O3PipeView:issue:249000 +O3PipeView:complete:250000 +O3PipeView:retire:251000:store:0 +O3PipeView:fetch:241000:0x00010204:0:119:addi a2, a2, 4:IntAlu O3PipeView:decode:241500 O3PipeView:rename:242000 O3PipeView:dispatch:243000 -O3PipeView:issue:246000 -O3PipeView:complete:246500 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241000:0x00010210:0:119:addi a0, a0, 4:IntAlu +O3PipeView:issue:243000 +O3PipeView:complete:243500 +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241000:0x00010208:0:120:addi a0, a0, 4:IntAlu O3PipeView:decode:241500 O3PipeView:rename:242000 O3PipeView:dispatch:243000 O3PipeView:issue:243000 O3PipeView:complete:243500 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241000:0x00010214:0:120:addi a1, a1, 4:IntAlu +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241000:0x0001020c:0:121:addi a1, a1, 4:IntAlu O3PipeView:decode:241500 O3PipeView:rename:242000 O3PipeView:dispatch:243000 -O3PipeView:issue:245000 -O3PipeView:complete:245500 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241000:0x00010218:0:121:addi a3, a3, -1:IntAlu +O3PipeView:issue:243000 +O3PipeView:complete:243500 +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241000:0x00010210:0:122:addi a3, a3, -1:IntAlu O3PipeView:decode:241500 O3PipeView:rename:242000 O3PipeView:dispatch:243000 O3PipeView:issue:243000 O3PipeView:complete:243500 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241000:0x0001021c:0:122:bne a3, zero, -48:IntAlu +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241000:0x00010214:0:123:bne a3, zero, -48:IntAlu O3PipeView:decode:241500 O3PipeView:rename:242000 O3PipeView:dispatch:243000 O3PipeView:issue:243500 O3PipeView:complete:244000 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241500:0x00010220:0:123:auipc a0, 1:IntAlu -O3PipeView:decode:242000 -O3PipeView:rename:242500 -O3PipeView:dispatch:243500 +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241000:0x00010218:0:124:auipc a0, 1:IntAlu +O3PipeView:decode:241500 +O3PipeView:rename:242000 +O3PipeView:dispatch:243000 +O3PipeView:issue:243000 +O3PipeView:complete:243500 +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241000:0x0001021c:0:125:ld a0, 344(a0):MemRead +O3PipeView:decode:241500 +O3PipeView:rename:242000 +O3PipeView:dispatch:243000 O3PipeView:issue:243500 O3PipeView:complete:244000 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241500:0x00010224:0:124:ld a0, 352(a0):MemRead -O3PipeView:decode:242000 -O3PipeView:rename:242500 -O3PipeView:dispatch:243500 -O3PipeView:issue:244000 -O3PipeView:complete:244500 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:241500:0x00010228:0:125:auipc a1, 1:IntAlu +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:241500:0x00010220:0:126:auipc a1, 1:IntAlu O3PipeView:decode:242000 O3PipeView:rename:242500 O3PipeView:dispatch:243500 O3PipeView:issue:243500 O3PipeView:complete:244000 -O3PipeView:retire:249500:store:0 -O3PipeView:fetch:240000:0x000101f4:0:112:fadd_s ft2, ft0, ft1:FloatAdd +O3PipeView:retire:252500:store:0 +O3PipeView:fetch:240000:0x000101ec:0:113:fadd_s ft2, ft0, ft1:FloatAdd O3PipeView:decode:240500 O3PipeView:rename:241000 O3PipeView:dispatch:242000 -O3PipeView:issue:246500 -O3PipeView:complete:247500 -O3PipeView:retire:249000:store:0 -O3PipeView:fetch:240000:0x000101f8:0:113:fsub_s ft3, ft0, ft1:FloatAdd +O3PipeView:issue:249500 +O3PipeView:complete:250500 +O3PipeView:retire:252000:store:0 +O3PipeView:fetch:240000:0x000101f0:0:114:fsub_s ft3, ft0, ft1:FloatAdd O3PipeView:decode:240500 O3PipeView:rename:241000 O3PipeView:dispatch:242000 -O3PipeView:issue:246500 -O3PipeView:complete:247500 -O3PipeView:retire:249000:store:0 -O3PipeView:fetch:240000:0x000101fc:0:114:feq_s a4, ft0, ft1:FloatCmp +O3PipeView:issue:249500 +O3PipeView:complete:250500 +O3PipeView:retire:252000:store:0 +O3PipeView:fetch:240000:0x000101f4:0:115:feq_s a4, ft0, ft1:FloatCmp O3PipeView:decode:240500 O3PipeView:rename:241000 O3PipeView:dispatch:242000 -O3PipeView:issue:246500 -O3PipeView:complete:247500 -O3PipeView:retire:249000:store:0 -O3PipeView:fetch:241500:0x0001022c:0:126:ld a1, 352(a1):MemRead +O3PipeView:issue:249500 +O3PipeView:complete:250500 +O3PipeView:retire:252000:store:0 +O3PipeView:fetch:189500:0x000101f8:0:93:fsw ft2, 0(a2):FloatMemWrite +O3PipeView:decode:190000 +O3PipeView:rename:190500 +O3PipeView:dispatch:191500 +O3PipeView:issue:250000 +O3PipeView:complete:250500 +O3PipeView:retire:251500:store:253500 +O3PipeView:fetch:241500:0x00010224:0:127:ld a1, 344(a1):MemRead O3PipeView:decode:242000 O3PipeView:rename:242500 O3PipeView:dispatch:243500 O3PipeView:issue:244000 O3PipeView:complete:244500 -O3PipeView:retire:250000:store:0 -O3PipeView:fetch:241500:0x00010230:0:127:auipc a2, 1:IntAlu +O3PipeView:retire:253000:store:0 +O3PipeView:fetch:241500:0x00010228:0:128:auipc a2, 1:IntAlu O3PipeView:decode:242000 O3PipeView:rename:242500 O3PipeView:dispatch:243500 O3PipeView:issue:243500 O3PipeView:complete:244000 -O3PipeView:retire:250000:store:0 -O3PipeView:fetch:241500:0x00010234:0:128:ld a2, 352(a2):MemRead +O3PipeView:retire:253000:store:0 +O3PipeView:fetch:241500:0x0001022c:0:129:ld a2, 344(a2):MemRead O3PipeView:decode:242000 O3PipeView:rename:242500 O3PipeView:dispatch:243500 O3PipeView:issue:244000 O3PipeView:complete:244500 -O3PipeView:retire:250000:store:0 -O3PipeView:fetch:241500:0x00010238:0:129:addi a3, zero, 2:IntAlu +O3PipeView:retire:253000:store:0 +O3PipeView:fetch:241500:0x00010230:0:130:addi a3, zero, 2:IntAlu O3PipeView:decode:242000 O3PipeView:rename:242500 O3PipeView:dispatch:243500 O3PipeView:issue:243500 O3PipeView:complete:244000 -O3PipeView:retire:250000:store:0 -O3PipeView:fetch:241500:0x0001023c:0:130:flw ft0, 0(a0):FloatMemRead +O3PipeView:retire:253000:store:0 +O3PipeView:fetch:241500:0x00010234:0:131:flw ft0, 0(a0):FloatMemRead O3PipeView:decode:242000 O3PipeView:rename:242500 O3PipeView:dispatch:243500 O3PipeView:issue:245500 O3PipeView:complete:246000 -O3PipeView:retire:250000:store:0 -O3PipeView:fetch:286500:0x00010240:0:131:flw ft1, 0(a1):FloatMemRead -O3PipeView:decode:287000 -O3PipeView:rename:287500 -O3PipeView:dispatch:288500 -O3PipeView:issue:288500 -O3PipeView:complete:289000 -O3PipeView:retire:291000:store:0 -O3PipeView:fetch:286500:0x00010244:0:132:fmul_s ft2, ft0, ft1:FloatMult -O3PipeView:decode:287000 -O3PipeView:rename:287500 -O3PipeView:dispatch:288500 -O3PipeView:issue:290000 -O3PipeView:complete:292000 -O3PipeView:retire:293000:store:0 -O3PipeView:fetch:286500:0x00010250:0:135:addi a2, a2, 4:IntAlu +O3PipeView:retire:253000:store:0 +O3PipeView:fetch:241500:0x00010238:0:132:flw ft1, 0(a1):FloatMemRead +O3PipeView:decode:242000 +O3PipeView:rename:242500 +O3PipeView:dispatch:243500 +O3PipeView:issue:245500 +O3PipeView:complete:246000 +O3PipeView:retire:253000:store:0 +O3PipeView:fetch:234500:0x00010200:0:95:fsw ft3, 0(a2):FloatMemWrite +O3PipeView:decode:235000 +O3PipeView:rename:235500 +O3PipeView:dispatch:236500 +O3PipeView:issue:250000 +O3PipeView:complete:250500 +O3PipeView:retire:251500:store:253501 +O3PipeView:fetch:240000:0x000101f8:0:116:fsw ft2, 0(a2):FloatMemWrite +O3PipeView:decode:240500 +O3PipeView:rename:241000 +O3PipeView:dispatch:242000 +O3PipeView:issue:250500 +O3PipeView:complete:251000 +O3PipeView:retire:252000:store:254000 +O3PipeView:fetch:241000:0x00010200:0:118:fsw ft3, 0(a2):FloatMemWrite +O3PipeView:decode:241500 +O3PipeView:rename:242000 +O3PipeView:dispatch:243000 +O3PipeView:issue:250500 +O3PipeView:complete:251000 +O3PipeView:retire:252000:store:254001 +O3PipeView:fetch:241500:0x0001023c:0:133:fmul_s ft2, ft0, ft1:FloatMult +O3PipeView:decode:242000 +O3PipeView:rename:242500 +O3PipeView:dispatch:243500 +O3PipeView:issue:250500 +O3PipeView:complete:252500 +O3PipeView:retire:253500:store:0 +O3PipeView:deps:0:137:136,134 +O3PipeView:deps:0:138:136 +O3PipeView:deps:0:142:141 +O3PipeView:deps:0:144:143 +O3PipeView:memdeps:0:144:137,135 +O3PipeView:deps:0:146:145 +O3PipeView:memdeps:0:146:137,135 +O3PipeView:deps:0:148:147 +O3PipeView:memdeps:0:148:137,135 +O3PipeView:memdeps:0:150:137 +O3PipeView:memdeps:0:151:137 +O3PipeView:deps:0:152:150,151 +O3PipeView:deps:0:153:150,151 +O3PipeView:deps:0:154:152 +O3PipeView:deps:0:156:155,153 +O3PipeView:deps:0:157:155 +O3PipeView:deps:0:161:160 +O3PipeView:deps:0:163:162 +O3PipeView:memdeps:0:163:156,154 +O3PipeView:deps:0:165:164 +O3PipeView:memdeps:0:165:156,154 +O3PipeView:deps:0:167:166 +O3PipeView:memdeps:0:167:156,154 +O3PipeView:fetch:286500:0x00010248:0:136:addi a2, a2, 4:IntAlu O3PipeView:decode:287000 O3PipeView:rename:287500 O3PipeView:dispatch:288500 O3PipeView:issue:288500 O3PipeView:complete:289000 -O3PipeView:retire:297000:store:0 -O3PipeView:fetch:287000:0x0001026c:0:142:auipc a0, 1:IntAlu +O3PipeView:retire:295500:store:0 +O3PipeView:fetch:287000:0x00010264:0:143:auipc a0, 1:IntAlu O3PipeView:decode:287500 O3PipeView:rename:288000 O3PipeView:dispatch:289000 O3PipeView:issue:289000 O3PipeView:complete:289500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:287000:0x00010270:0:143:ld a0, 300(a0):MemRead +O3PipeView:fetch:287000:0x00010268:0:144:ld a0, 292(a0):MemRead O3PipeView:decode:287500 O3PipeView:rename:288000 O3PipeView:dispatch:289000 O3PipeView:issue:289500 O3PipeView:complete:290000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:287000:0x00010274:0:144:auipc a1, 1:IntAlu +O3PipeView:fetch:287000:0x0001026c:0:145:auipc a1, 1:IntAlu O3PipeView:decode:287500 O3PipeView:rename:288000 O3PipeView:dispatch:289000 O3PipeView:issue:289000 O3PipeView:complete:289500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:287000:0x00010278:0:145:ld a1, 300(a1):MemRead +O3PipeView:fetch:287000:0x00010270:0:146:ld a1, 292(a1):MemRead O3PipeView:decode:287500 O3PipeView:rename:288000 O3PipeView:dispatch:289000 O3PipeView:issue:289500 O3PipeView:complete:290000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:287000:0x0001027c:0:146:auipc a2, 1:IntAlu +O3PipeView:fetch:287000:0x00010274:0:147:auipc a2, 1:IntAlu O3PipeView:decode:287500 O3PipeView:rename:288000 O3PipeView:dispatch:289000 O3PipeView:issue:289000 O3PipeView:complete:289500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:286500:0x00010258:0:137:addi a2, a2, 4:IntAlu +O3PipeView:fetch:287000:0x00010278:0:148:ld a2, 292(a2):MemRead +O3PipeView:decode:287500 +O3PipeView:rename:288000 +O3PipeView:dispatch:289000 +O3PipeView:issue:289500 +O3PipeView:complete:290000 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:287000:0x0001027c:0:149:addi t0, zero, 4:IntAlu +O3PipeView:decode:287500 +O3PipeView:rename:288000 +O3PipeView:dispatch:289000 +O3PipeView:issue:289000 +O3PipeView:complete:289500 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:286500:0x00010250:0:138:addi a2, a2, 4:IntAlu O3PipeView:decode:287000 O3PipeView:rename:287500 O3PipeView:dispatch:288500 O3PipeView:issue:289000 O3PipeView:complete:289500 -O3PipeView:retire:297500:store:0 -O3PipeView:fetch:286500:0x0001025c:0:138:addi a0, a0, 4:IntAlu +O3PipeView:retire:296000:store:0 +O3PipeView:fetch:286500:0x00010254:0:139:addi a0, a0, 4:IntAlu O3PipeView:decode:287000 O3PipeView:rename:287500 O3PipeView:dispatch:288500 O3PipeView:issue:288500 O3PipeView:complete:289000 -O3PipeView:retire:297500:store:0 -O3PipeView:fetch:287000:0x00010260:0:139:addi a1, a1, 4:IntAlu -O3PipeView:decode:287500 -O3PipeView:rename:288000 -O3PipeView:dispatch:289000 -O3PipeView:issue:289000 -O3PipeView:complete:289500 -O3PipeView:retire:297500:store:0 -O3PipeView:fetch:287000:0x00010264:0:140:addi a3, a3, -1:IntAlu +O3PipeView:retire:296000:store:0 +O3PipeView:fetch:286500:0x00010258:0:140:addi a1, a1, 4:IntAlu +O3PipeView:decode:287000 +O3PipeView:rename:287500 +O3PipeView:dispatch:288500 +O3PipeView:issue:288500 +O3PipeView:complete:289000 +O3PipeView:retire:296000:store:0 +O3PipeView:fetch:286500:0x0001025c:0:141:addi a3, a3, -1:IntAlu +O3PipeView:decode:287000 +O3PipeView:rename:287500 +O3PipeView:dispatch:288500 +O3PipeView:issue:288500 +O3PipeView:complete:289000 +O3PipeView:retire:296000:store:0 +O3PipeView:fetch:287000:0x00010260:0:142:bne a3, zero, -44:IntAlu O3PipeView:decode:287500 O3PipeView:rename:288000 O3PipeView:dispatch:289000 O3PipeView:issue:289000 O3PipeView:complete:289500 -O3PipeView:retire:297500:store:0 -O3PipeView:fetch:287000:0x00010268:0:141:bne a3, zero, -44:IntAlu -O3PipeView:decode:287500 -O3PipeView:rename:288000 -O3PipeView:dispatch:289000 -O3PipeView:issue:289500 -O3PipeView:complete:290000 -O3PipeView:retire:297500:store:0 -O3PipeView:fetch:286500:0x00010248:0:133:fdiv_s ft3, ft0, ft1:FloatDiv +O3PipeView:retire:296000:store:0 +O3PipeView:fetch:286500:0x00010240:0:134:fdiv_s ft3, ft0, ft1:FloatDiv +O3PipeView:decode:287000 +O3PipeView:rename:287500 +O3PipeView:dispatch:288500 +O3PipeView:issue:288500 +O3PipeView:complete:294500 +O3PipeView:retire:295500:store:0 +O3PipeView:fetch:286500:0x00010244:0:135:fsw ft2, 0(a2):FloatMemWrite +O3PipeView:decode:287000 +O3PipeView:rename:287500 +O3PipeView:dispatch:288500 +O3PipeView:issue:288500 +O3PipeView:complete:289000 +O3PipeView:retire:295500:store:297503 +O3PipeView:fetch:286500:0x0001024c:0:137:fsw ft3, 0(a2):FloatMemWrite O3PipeView:decode:287000 O3PipeView:rename:287500 O3PipeView:dispatch:288500 -O3PipeView:issue:290000 -O3PipeView:complete:296000 -O3PipeView:retire:297000:store:0 -O3PipeView:fetch:292500:0x0001023c:0:147:flw ft0, 0(a0):FloatMemRead -O3PipeView:decode:293000 -O3PipeView:rename:293500 -O3PipeView:dispatch:294500 O3PipeView:issue:294500 O3PipeView:complete:295000 -O3PipeView:retire:297500:store:0 -O3PipeView:fetch:293500:0x00010240:0:148:flw ft1, 0(a1):FloatMemRead -O3PipeView:decode:294000 -O3PipeView:rename:294500 -O3PipeView:dispatch:295500 +O3PipeView:retire:296000:store:298000 +O3PipeView:fetch:292000:0x00010234:0:150:flw ft0, 0(a0):FloatMemRead +O3PipeView:decode:292500 +O3PipeView:rename:293000 +O3PipeView:dispatch:294000 +O3PipeView:issue:294000 +O3PipeView:complete:294500 +O3PipeView:retire:296500:store:0 +O3PipeView:fetch:292000:0x00010238:0:151:flw ft1, 0(a1):FloatMemRead +O3PipeView:decode:292500 +O3PipeView:rename:293000 +O3PipeView:dispatch:294000 +O3PipeView:issue:294000 +O3PipeView:complete:294500 +O3PipeView:retire:297000:store:0 +O3PipeView:fetch:292000:0x0001023c:0:152:fmul_s ft2, ft0, ft1:FloatMult +O3PipeView:decode:292500 +O3PipeView:rename:293000 +O3PipeView:dispatch:294000 +O3PipeView:issue:296000 +O3PipeView:complete:298000 +O3PipeView:retire:299000:store:0 +O3PipeView:fetch:293000:0x00010248:0:155:addi a2, a2, 4:IntAlu +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:295000 +O3PipeView:complete:295500 +O3PipeView:retire:303000:store:0 +O3PipeView:fetch:293000:0x00010250:0:157:addi a2, a2, 4:IntAlu +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 O3PipeView:issue:295500 O3PipeView:complete:296000 -O3PipeView:retire:298000:store:0 -O3PipeView:fetch:234500:0x00010200:0:94:fsw ft2, 0(a2):FloatMemWrite -O3PipeView:decode:235000 -O3PipeView:rename:235500 -O3PipeView:dispatch:236500 -O3PipeView:issue:247000 -O3PipeView:complete:247500 -O3PipeView:retire:248500:store:301000 -O3PipeView:fetch:293500:0x00010244:0:149:fmul_s ft2, ft0, ft1:FloatMult +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293000:0x00010254:0:158:addi a0, a0, 4:IntAlu +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:295000 +O3PipeView:complete:295500 +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293000:0x00010258:0:159:addi a1, a1, 4:IntAlu +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:295000 +O3PipeView:complete:295500 +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293000:0x0001025c:0:160:addi a3, a3, -1:IntAlu +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:295000 +O3PipeView:complete:295500 +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293500:0x00010260:0:161:bne a3, zero, -44:IntAlu O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 -O3PipeView:issue:297000 -O3PipeView:complete:299000 -O3PipeView:retire:300000:store:0 -O3PipeView:fetch:293500:0x00010250:0:152:addi a2, a2, 4:IntAlu +O3PipeView:issue:295500 +O3PipeView:complete:296000 +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293500:0x00010264:0:162:auipc a0, 1:IntAlu O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 O3PipeView:issue:295500 O3PipeView:complete:296000 -O3PipeView:retire:304000:store:0 -O3PipeView:fetch:234500:0x00010208:0:96:fsw ft3, 0(a2):FloatMemWrite -O3PipeView:decode:235000 -O3PipeView:rename:235500 -O3PipeView:dispatch:236500 -O3PipeView:issue:247000 -O3PipeView:complete:247500 -O3PipeView:retire:248500:store:305000 -O3PipeView:fetch:293500:0x00010258:0:154:addi a2, a2, 4:IntAlu +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293500:0x00010268:0:163:ld a0, 292(a0):MemRead O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 O3PipeView:issue:296000 O3PipeView:complete:296500 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:293500:0x0001025c:0:155:addi a0, a0, 4:IntAlu +O3PipeView:retire:303500:store:0 +O3PipeView:fetch:293500:0x0001026c:0:164:auipc a1, 1:IntAlu O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 O3PipeView:issue:295500 O3PipeView:complete:296000 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:294000:0x00010260:0:156:addi a1, a1, 4:IntAlu -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296000 -O3PipeView:complete:296500 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:294000:0x00010264:0:157:addi a3, a3, -1:IntAlu -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296000 -O3PipeView:complete:296500 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:294000:0x00010268:0:158:bne a3, zero, -44:IntAlu -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296500 -O3PipeView:complete:297000 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:294000:0x0001026c:0:159:auipc a0, 1:IntAlu -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296000 -O3PipeView:complete:296500 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:294000:0x00010270:0:160:ld a0, 300(a0):MemRead -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296500 -O3PipeView:complete:297000 -O3PipeView:retire:304500:store:0 -O3PipeView:fetch:241000:0x00010200:0:115:fsw ft2, 0(a2):FloatMemWrite -O3PipeView:decode:241500 -O3PipeView:rename:242000 -O3PipeView:dispatch:243000 -O3PipeView:issue:247500 -O3PipeView:complete:248000 -O3PipeView:retire:249000:store:305001 -O3PipeView:fetch:286500:0x0001024c:0:134:fsw ft2, 0(a2):FloatMemWrite -O3PipeView:decode:287000 -O3PipeView:rename:287500 -O3PipeView:dispatch:288500 -O3PipeView:issue:292000 -O3PipeView:complete:292500 -O3PipeView:retire:297000:store:301001 -O3PipeView:fetch:241000:0x00010208:0:117:fsw ft3, 0(a2):FloatMemWrite -O3PipeView:decode:241500 -O3PipeView:rename:242000 -O3PipeView:dispatch:243000 -O3PipeView:issue:247500 -O3PipeView:complete:248000 -O3PipeView:retire:249000:store:305002 -O3PipeView:fetch:286500:0x00010254:0:136:fsw ft3, 0(a2):FloatMemWrite -O3PipeView:decode:287000 -O3PipeView:rename:287500 -O3PipeView:dispatch:288500 -O3PipeView:issue:296000 -O3PipeView:complete:296500 -O3PipeView:retire:297500:store:305003 -O3PipeView:fetch:294000:0x00010274:0:161:auipc a1, 1:IntAlu -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296000 -O3PipeView:complete:296500 -O3PipeView:retire:305000:store:0 -O3PipeView:fetch:294000:0x00010278:0:162:ld a1, 300(a1):MemRead -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 -O3PipeView:issue:296500 -O3PipeView:complete:297000 -O3PipeView:retire:305000:store:0 -O3PipeView:fetch:294000:0x0001027c:0:163:auipc a2, 1:IntAlu -O3PipeView:decode:294500 -O3PipeView:rename:295000 -O3PipeView:dispatch:296000 +O3PipeView:retire:304000:store:0 +O3PipeView:fetch:293500:0x00010270:0:165:ld a1, 292(a1):MemRead +O3PipeView:decode:294000 +O3PipeView:rename:294500 +O3PipeView:dispatch:295500 O3PipeView:issue:296000 O3PipeView:complete:296500 -O3PipeView:retire:305000:store:0 -O3PipeView:fetch:293500:0x00010248:0:150:fdiv_s ft3, ft0, ft1:FloatDiv +O3PipeView:retire:304000:store:0 +O3PipeView:fetch:293500:0x00010274:0:166:auipc a2, 1:IntAlu O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 -O3PipeView:issue:297000 -O3PipeView:complete:303000 +O3PipeView:issue:295500 +O3PipeView:complete:296000 O3PipeView:retire:304000:store:0 -O3PipeView:fetch:293500:0x0001024c:0:151:fsw ft2, 0(a2):FloatMemWrite +O3PipeView:fetch:293500:0x00010278:0:167:ld a2, 292(a2):MemRead O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 -O3PipeView:issue:299000 -O3PipeView:complete:299500 -O3PipeView:retire:304000:store:306000 -O3PipeView:fetch:293500:0x00010254:0:153:fsw ft3, 0(a2):FloatMemWrite +O3PipeView:issue:296000 +O3PipeView:complete:296500 +O3PipeView:retire:304000:store:0 +O3PipeView:fetch:293500:0x0001027c:0:168:addi t0, zero, 4:IntAlu O3PipeView:decode:294000 O3PipeView:rename:294500 O3PipeView:dispatch:295500 -O3PipeView:issue:303000 -O3PipeView:complete:303500 -O3PipeView:retire:304500:store:306500 -O3PipeView:fetch:339500:0x000102be:0:182:c_addi4spn s0, sp, 0:IntAlu -O3PipeView:decode:340000 -O3PipeView:rename:340500 +O3PipeView:issue:295500 +O3PipeView:complete:296000 +O3PipeView:retire:304000:store:0 +O3PipeView:fetch:293000:0x00010240:0:153:fdiv_s ft3, ft0, ft1:FloatDiv +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:296000 +O3PipeView:complete:302000 +O3PipeView:retire:303000:store:0 +O3PipeView:fetch:293000:0x00010244:0:154:fsw ft2, 0(a2):FloatMemWrite +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:298000 +O3PipeView:complete:298500 +O3PipeView:retire:303000:store:305000 +O3PipeView:fetch:293000:0x0001024c:0:156:fsw ft3, 0(a2):FloatMemWrite +O3PipeView:decode:293500 +O3PipeView:rename:294000 +O3PipeView:dispatch:295000 +O3PipeView:issue:302000 +O3PipeView:complete:302500 +O3PipeView:retire:303500:store:305500 +O3PipeView:fetch:339000:0x000102b4:0:184:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:339500 +O3PipeView:rename:340000 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339500:0x000102bc:0:181:c_addi4spn s0, sp, 0:IntAlu -O3PipeView:decode:340000 -O3PipeView:rename:340500 +O3PipeView:fetch:339000:0x000102b2:0:183:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:339500 +O3PipeView:rename:340000 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339500:0x000102ba:0:180:c_addi4spn s0, sp, 0:IntAlu -O3PipeView:decode:340000 -O3PipeView:rename:340500 +O3PipeView:fetch:339000:0x000102b0:0:182:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:339500 +O3PipeView:rename:340000 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102b8:0:179:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:fetch:339000:0x000102ae:0:181:c_addi4spn s0, sp, 0:IntAlu O3PipeView:decode:339500 O3PipeView:rename:340000 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102b6:0:178:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:fetch:339000:0x000102ac:0:180:c_addi4spn s0, sp, 0:IntAlu O3PipeView:decode:339500 O3PipeView:rename:340000 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102b4:0:177:c_addi4spn s0, sp, 0:IntAlu -O3PipeView:decode:339500 -O3PipeView:rename:340000 +O3PipeView:fetch:339500:0x000102be:0:189:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:340000 +O3PipeView:rename:340500 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102a0:0:172:addi a2, a2, 32:IntAlu -O3PipeView:decode:339500 -O3PipeView:rename:340000 -O3PipeView:dispatch:341000 -O3PipeView:issue:342000 +O3PipeView:fetch:339500:0x000102bc:0:188:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:340000 +O3PipeView:rename:340500 +O3PipeView:dispatch:0 +O3PipeView:issue:0 +O3PipeView:complete:0 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:339500:0x000102ba:0:187:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:340000 +O3PipeView:rename:340500 +O3PipeView:dispatch:0 +O3PipeView:issue:0 +O3PipeView:complete:0 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:339500:0x000102b8:0:186:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:340000 +O3PipeView:rename:340500 +O3PipeView:dispatch:0 +O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102b0:0:176:ecall:No_OpClass +O3PipeView:fetch:339500:0x000102b6:0:185:c_addi4spn s0, sp, 0:IntAlu +O3PipeView:decode:340000 +O3PipeView:rename:340500 +O3PipeView:dispatch:0 +O3PipeView:issue:0 +O3PipeView:complete:0 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:339000:0x000102a8:0:179:ecall:No_OpClass O3PipeView:decode:339500 O3PipeView:rename:340000 O3PipeView:dispatch:341000 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x0001029c:0:171:vnop:No_OpClass +O3PipeView:fetch:338500:0x0001029c:0:176:vnop:No_OpClass O3PipeView:decode:339000 O3PipeView:rename:339500 O3PipeView:dispatch:340500 O3PipeView:issue:340500 O3PipeView:complete:341000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x00010298:0:170:vnop:No_OpClass +O3PipeView:fetch:338500:0x00010298:0:175:addi a2, a2, 32:IntAlu O3PipeView:decode:339000 O3PipeView:rename:339500 O3PipeView:dispatch:340500 O3PipeView:issue:340500 O3PipeView:complete:341000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x00010294:0:169:vnop:No_OpClass +O3PipeView:fetch:338500:0x00010294:0:174:vnop:No_OpClass O3PipeView:decode:339000 O3PipeView:rename:339500 O3PipeView:dispatch:340500 O3PipeView:issue:340500 O3PipeView:complete:341000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x00010290:0:168:vnop:No_OpClass +O3PipeView:fetch:338500:0x00010290:0:173:vnop:No_OpClass O3PipeView:decode:339000 O3PipeView:rename:339500 O3PipeView:dispatch:340500 O3PipeView:issue:340500 O3PipeView:complete:341000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x0001028c:0:167:vnop:No_OpClass +O3PipeView:fetch:338500:0x0001028c:0:172:vnop:No_OpClass O3PipeView:decode:339000 O3PipeView:rename:339500 O3PipeView:dispatch:340500 O3PipeView:issue:340500 O3PipeView:complete:341000 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x00010284:0:165:addi t0, zero, 4:IntAlu +O3PipeView:fetch:338500:0x00010288:0:171:vnop:No_OpClass +O3PipeView:decode:339000 +O3PipeView:rename:339500 +O3PipeView:dispatch:340500 +O3PipeView:issue:340500 +O3PipeView:complete:341000 +O3PipeView:retire:0:store:0 +O3PipeView:fetch:338500:0x00010284:0:170:vnop:No_OpClass O3PipeView:decode:339000 O3PipeView:rename:339500 O3PipeView:dispatch:340500 O3PipeView:issue:340500 O3PipeView:complete:341000 -O3PipeView:retire:343000:store:0 -O3PipeView:fetch:339000:0x000102ac:0:175:addi a7, zero, 93:IntAlu -O3PipeView:decode:339500 -O3PipeView:rename:340000 -O3PipeView:dispatch:341000 -O3PipeView:issue:341000 -O3PipeView:complete:341500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102a8:0:174:addi a0, zero, 0:IntAlu +O3PipeView:fetch:338500:0x00010280:0:169:vsetvli t0, t0, e32, m1, ta, ma:SimdConfig +O3PipeView:decode:339000 +O3PipeView:rename:339500 +O3PipeView:dispatch:340500 +O3PipeView:issue:340500 +O3PipeView:complete:341000 +O3PipeView:retire:342500:store:0 +O3PipeView:fetch:339000:0x000102a4:0:178:addi a7, zero, 93:IntAlu O3PipeView:decode:339500 O3PipeView:rename:340000 O3PipeView:dispatch:341000 O3PipeView:issue:341000 O3PipeView:complete:341500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:339000:0x000102a4:0:173:vnop:No_OpClass +O3PipeView:fetch:339000:0x000102a0:0:177:addi a0, zero, 0:IntAlu O3PipeView:decode:339500 O3PipeView:rename:340000 O3PipeView:dispatch:341000 O3PipeView:issue:341000 O3PipeView:complete:341500 O3PipeView:retire:0:store:0 -O3PipeView:fetch:338500:0x00010288:0:166:vsetvli t0, t0, e32, m1, ta, ma:SimdConfig -O3PipeView:decode:339000 -O3PipeView:rename:339500 -O3PipeView:dispatch:340500 -O3PipeView:issue:341000 -O3PipeView:complete:341500 -O3PipeView:retire:343000:store:0 -O3PipeView:fetch:338500:0x00010280:0:164:ld a2, 300(a2):MemRead -O3PipeView:decode:339000 -O3PipeView:rename:339500 -O3PipeView:dispatch:340500 -O3PipeView:issue:340500 -O3PipeView:complete:341000 -O3PipeView:retire:343000:store:0 -O3PipeView:fetch:344000:0x0001028c:0:183:vle32_v_micro v1, 0(a0), zero:SimdUnitStrideLoad -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:346000 -O3PipeView:complete:346500 -O3PipeView:retire:348500:store:0 -O3PipeView:fetch:344000:0x000102a0:0:188:addi a2, a2, 32:IntAlu -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:346000 -O3PipeView:complete:346500 -O3PipeView:retire:350000:store:0 -O3PipeView:fetch:344000:0x000102a8:0:190:addi a0, zero, 0:IntAlu -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:346000 -O3PipeView:complete:346500 -O3PipeView:retire:350000:store:0 -O3PipeView:fetch:344500:0x000102ac:0:191:addi a7, zero, 93:IntAlu -O3PipeView:decode:345500 -O3PipeView:rename:346000 -O3PipeView:dispatch:347000 -O3PipeView:issue:347000 -O3PipeView:complete:347500 -O3PipeView:retire:350000:store:0 -O3PipeView:fetch:344000:0x00010290:0:184:vle32_v_micro v2, 0(a1), zero:SimdUnitStrideLoad -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:346000 -O3PipeView:complete:346500 -O3PipeView:retire:349000:store:0 -O3PipeView:fetch:344000:0x00010298:0:186:vmul_vv_micro v4, v1, v2:SimdMult -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:348000 -O3PipeView:complete:348500 -O3PipeView:retire:349500:store:0 -O3PipeView:fetch:344000:0x00010294:0:185:vadd_vv_micro v3, v1, v2:SimdAdd -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:348000 -O3PipeView:complete:348500 -O3PipeView:retire:349500:store:0 -O3PipeView:fetch:344000:0x0001029c:0:187:vse32_v_micro v3, 0(a2):SimdUnitStrideStore -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:348500 -O3PipeView:complete:349000 -O3PipeView:retire:350000:store:352000 -O3PipeView:fetch:344000:0x000102a4:0:189:vse32_v_micro v4, 0(a2):SimdUnitStrideStore -O3PipeView:decode:344500 -O3PipeView:rename:345000 -O3PipeView:dispatch:346000 -O3PipeView:issue:348500 -O3PipeView:complete:349000 -O3PipeView:retire:350000:store:352001 +O3PipeView:deps:0:192:191,190 +O3PipeView:deps:0:193:191,190 +O3PipeView:deps:0:194:192 +O3PipeView:deps:0:196:195,193 +O3PipeView:fetch:343500:0x00010284:0:190:vle32_v_micro v1, 0(a0), zero:SimdUnitStrideLoad +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:345500 +O3PipeView:complete:346000 +O3PipeView:retire:398000:store:0 +O3PipeView:fetch:343500:0x00010298:0:195:addi a2, a2, 32:IntAlu +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:345500 +O3PipeView:complete:346000 +O3PipeView:retire:403000:store:0 +O3PipeView:fetch:343500:0x000102a0:0:197:addi a0, zero, 0:IntAlu +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:345500 +O3PipeView:complete:346000 +O3PipeView:retire:403000:store:0 +O3PipeView:fetch:344000:0x000102a4:0:198:addi a7, zero, 93:IntAlu +O3PipeView:decode:345000 +O3PipeView:rename:345500 +O3PipeView:dispatch:346500 +O3PipeView:issue:346500 +O3PipeView:complete:347000 +O3PipeView:retire:403000:store:0 +O3PipeView:fetch:343500:0x00010288:0:191:vle32_v_micro v2, 0(a1), zero:SimdUnitStrideLoad +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:345500 +O3PipeView:complete:346000 +O3PipeView:retire:402000:store:0 +O3PipeView:fetch:343500:0x00010290:0:193:vmul_vv_micro v4, v1, v2:SimdMult +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:401000 +O3PipeView:complete:401500 +O3PipeView:retire:402500:store:0 +O3PipeView:fetch:343500:0x0001028c:0:192:vadd_vv_micro v3, v1, v2:SimdAdd +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:401000 +O3PipeView:complete:401500 +O3PipeView:retire:402500:store:0 +O3PipeView:fetch:343500:0x00010294:0:194:vse32_v_micro v3, 0(a2):SimdUnitStrideStore +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:401500 +O3PipeView:complete:402000 +O3PipeView:retire:403000:store:405000 +O3PipeView:fetch:343500:0x0001029c:0:196:vse32_v_micro v4, 0(a2):SimdUnitStrideStore +O3PipeView:decode:344000 +O3PipeView:rename:344500 +O3PipeView:dispatch:345500 +O3PipeView:issue:401500 +O3PipeView:complete:402000 +O3PipeView:retire:403000:store:405001 diff --git a/examples/reference/reference_0.json.gz b/examples/reference/reference_0.json.gz new file mode 100644 index 0000000..a9c13b5 Binary files /dev/null and b/examples/reference/reference_0.json.gz differ diff --git a/src/uScope/O3.py b/src/uScope/O3.py index 2297f63..af865c5 100644 --- a/src/uScope/O3.py +++ b/src/uScope/O3.py @@ -1,4 +1,4 @@ -from dataclasses import dataclass +from dataclasses import dataclass, field from enum import Enum from typing import Dict, List @@ -36,6 +36,8 @@ class Instruction: stages: Dict[PipelineStage, int] stage_order: List[PipelineStage] store_tick: int = 0 + core_id: int = 0 + producers: List[int] = field(default_factory=list) @property def mnemonic(self): diff --git a/src/uScope/configs/colors.json b/src/uScope/configs/colors.json index 58315c0..d8ca7f9 100644 --- a/src/uScope/configs/colors.json +++ b/src/uScope/configs/colors.json @@ -8,8 +8,7 @@ "IntMultDiv": [ "rail_animation", "cq_build_attempt_failed", - "terrible", - "head_dump_child_node_arrow" + "terrible" ], "FP_ALU": [ "good", @@ -38,7 +37,6 @@ "Matrix_Unit": [ "bad", "terrible", - "head_dump_child_node_arrow", "thread_state_uninterruptible" ], "System_Unit": [ diff --git a/src/uScope/converter.py b/src/uScope/converter.py index 033982f..c30526f 100644 --- a/src/uScope/converter.py +++ b/src/uScope/converter.py @@ -1,9 +1,9 @@ -from typing import Dict, List, Tuple +from typing import Dict, List, Optional, Tuple from tqdm import tqdm from .O3 import PipelineStage, Instruction -from .events import MetadataEvent, DurationEvent +from .events import MetadataEvent, DurationEvent, FlowEvent from .thread_pool import StageLaneManager from .config import IConfig from .parser import PipeViewParser @@ -18,6 +18,7 @@ def __init__( exclude_pipeline: bool = False, only_committed: bool = False, store_completions: bool = True, + data_flow: bool = False, ): self.parser: PipeViewParser = parser if not isinstance(config, IConfig): @@ -31,13 +32,19 @@ def __init__( self.exclude_pipeline: bool = exclude_pipeline self.only_committed: bool = only_committed self.store_completions: bool = store_completions + self.data_flow: bool = data_flow self.metadata_events: List[MetadataEvent] = [] self.duration_events: List[DurationEvent] = [] self.stage_managers: Dict[PipelineStage, StageLaneManager] = {} self.func_units_managers: Dict[str, StageLaneManager] = {} - self.store_lane_manager: StageLaneManager = None + self.store_lane_manager: Optional[StageLaneManager] = None + + self._fu_seq_to_idx: Dict[int, int] = {} + self._fu_info: Dict[int, Tuple[int, int, int, int, str, str]] = {} + self._pending_flows: Dict[int, List[FlowEvent]] = {} + self._flow_id: int = 0 def convert(self, progress: bool = True) -> List[dict]: self._add_metadata() @@ -55,10 +62,19 @@ def convert(self, progress: bool = True) -> List[dict]: self._add_pipeline_stage_events(instr) if not self.exclude_exec: self._add_execution_unit_events(instr) + if self.data_flow and instr.producers: + self._wire_flow_for_instr(instr) if self.store_completions and instr.store_tick > 0: self._add_store_completion_event(instr) - return [e.to_dict() for e in self.metadata_events + self.duration_events] + if not self.data_flow: + return [e.to_dict() for e in self.metadata_events + self.duration_events] + result = [e.to_dict() for e in self.metadata_events] + for idx, evt in enumerate(self.duration_events): + result.append(evt.to_dict()) + for f in self._pending_flows.get(idx, []): + result.append(f.to_dict()) + return result def instructions_by_seq_num(self): return sorted(self.parser.instructions.values(), key=lambda x: x.seq_num) @@ -123,13 +139,14 @@ def _assign_lane_for_func_units( ) -> Tuple[int, int]: return self.func_units_managers[unit_name].assign_lane(start_time, end_time) + def _cname_for(self, instr: Instruction) -> str: + if instr.is_squashed: + return self.config.get_squashed_cname() + return self.config.get_color_for_instr(instr) + def _add_pipeline_stage_events(self, instr: Instruction): mnemonic = instr.mnemonic - cname = ( - self.config.get_squashed_cname() - if instr.is_squashed - else self.config.get_color_for_instr(instr) - ) + cname = self._cname_for(instr) active = [ (st, instr.stages[st]) @@ -160,9 +177,48 @@ def _add_pipeline_stage_events(self, instr: Instruction): "Stage": self.config.get_stage_name(stage), "OpClass": instr.opclass, "Disasm": instr.disasm, - }, - ) + }, ) + ) + + def _wire_flow_for_instr(self, instr: Instruction): + cons_info = self._fu_info.get(instr.seq_num) + if cons_info is None: + return + cons_issue, cons_complete, cons_pid, cons_tid, _cu, _cc = cons_info + cons_idx = self._fu_seq_to_idx[instr.seq_num] + for prod_seq in instr.producers: + prod_info = self._fu_info.get(prod_seq) + if prod_info is None: + continue + prod_issue, prod_complete, prod_pid, prod_tid, prod_unit, prod_cname = prod_info + prod_idx = self._fu_seq_to_idx[prod_seq] + self._flow_id += 1 + fid = str(self._flow_id) + s_event = FlowEvent( + name="dep", + ph="s", + id=fid, + bp="e", + cat=prod_unit, + cname=prod_cname, + pid=prod_pid, + tid=prod_tid, + ts=prod_complete, + ) + self._pending_flows.setdefault(prod_idx, []).append(s_event) + f_event = FlowEvent( + name="dep", + ph="f", + id=fid, + bp="e", + cat=prod_unit, + cname=prod_cname, + pid=cons_pid, + tid=cons_tid, + ts=cons_issue, + ) + self._pending_flows.setdefault(cons_idx, []).append(f_event) def _add_execution_unit_events(self, instr: Instruction): if not instr.opclass: @@ -181,31 +237,29 @@ def _add_execution_unit_events(self, instr: Instruction): pid, tid = self._assign_lane_for_func_units(unit, issue, complete) dur = complete - issue - cname = ( - self.config.get_squashed_cname() - if instr.is_squashed - else self.config.get_color_for_instr(instr) - ) + cname = self._cname_for(instr) - self.duration_events.append( - DurationEvent( - name=mnemonic, - cat=unit, - ts=issue, - dur=dur, - pid=pid, - tid=tid, - cname=cname, - args={ - "PC": instr.pc, - "SeqNum": instr.seq_num, - "OpClass": instr.opclass, - "Unit": unit, - "Duration": dur, - "Disasm": instr.disasm, - }, - ) + evt = DurationEvent( + name=mnemonic, + cat=unit, + ts=issue, + dur=dur, + pid=pid, + tid=tid, + cname=cname, + args={ + "PC": instr.pc, + "SeqNum": instr.seq_num, + "OpClass": instr.opclass, + "Unit": unit, + "Duration": dur, + "Disasm": instr.disasm, + }, ) + idx = len(self.duration_events) + self._fu_seq_to_idx[instr.seq_num] = idx + self._fu_info[instr.seq_num] = (issue, complete, pid, tid, unit, cname) + self.duration_events.append(evt) def _add_store_completions_metadata(self): store_name = self.config.get_stage_name(PipelineStage.STORE_COMPLETE) @@ -242,11 +296,7 @@ def _add_store_completion_event(self, instr: Instruction): _, tid = self.store_lane_manager.assign_lane(retire_tick, store_tick) dur = store_tick - retire_tick - cname = ( - self.config.get_squashed_cname() - if instr.is_squashed - else self.config.get_color_for_instr(instr) - ) + cname = self._cname_for(instr) self.duration_events.append( DurationEvent( diff --git a/src/uScope/events.py b/src/uScope/events.py index 91d6f9c..8a0dc9e 100644 --- a/src/uScope/events.py +++ b/src/uScope/events.py @@ -27,3 +27,14 @@ class DurationEvent(Event): cname: Optional[str] = None ph: str = "X" tid: Optional[int] = None + + +@dataclass +class FlowEvent(Event): + id: str + ts: int + ph: str + bp: str + cat: Optional[str] = None + cname: Optional[str] = None + tid: Optional[int] = None diff --git a/src/uScope/main.py b/src/uScope/main.py index a3776fd..0815ffb 100644 --- a/src/uScope/main.py +++ b/src/uScope/main.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import argparse +import os import sys import json import logging @@ -16,17 +17,46 @@ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") logger = logging.getLogger(__name__) + +def _make_output_path(output_dir: str, input_stem: str, core_id: int, gzip_enabled: bool) -> str: + output = str(Path(output_dir) / f"{input_stem}_{core_id}.json") + if gzip_enabled: + output += '.gz' + return output + + +def _convert_and_dump( + trace_parser: PipeViewParser, + config, + args, + output_file: str, + progress: bool, +): + converter = ChromeTracingConverter( + trace_parser, config, + args.exclude_exec, args.exclude_pipeline, + args.only_committed, args.store_completions, + args.data_flow, + ) + events = converter.convert(progress=progress) + logger.info(f"Writing {output_file}") + with (gzip.open if args.gzip else open)(output_file, 'wt', encoding='utf-8') as f: + json.dump(events, f, indent=2) + return len(events) + def main(): parser = argparse.ArgumentParser( description="Convert gem5 O3PipeView trace to Perfetto / Chrome Tracing JSON format." ) parser.add_argument( "--input-file", '-i', + required=True, help="Path to the input trace file (e.g., trace.out)" ) parser.add_argument( - "--output-file", "-o", - help="Output JSON file name. If not specified, it will be derived from input_file" + "--output-dir", "-o", + default=".", + help="Output directory for JSON traces. Defaults to current directory." ) parser.add_argument( "--config-path", "-c", @@ -89,6 +119,12 @@ def main(): action="store_false", help="Disable store completion tick events" ) + parser.add_argument( + "--data-flow", + default=False, + action="store_true", + help="Add data-flow dependency" + ) args = parser.parse_args() @@ -99,22 +135,14 @@ def main(): logging.getLogger().setLevel(logging.WARNING) input_file = args.input_file - - if args.output_file: - output_file = args.output_file - else: - if input_file.endswith('.out'): - output_file = input_file[:-4] + '.json' - else: - output_file = input_file + '.json' - - if args.gzip and not output_file.endswith('.gz'): - output_file += '.gz' + output_dir = args.output_dir try: if not Path(input_file).exists(): raise FileNotFoundError(f"Input file not found: {input_file}") + os.makedirs(output_dir, exist_ok=True) + logger.info(f"Parsing {input_file}") trace_parser = PipeViewParser() trace_parser.parse_file(input_file) @@ -123,18 +151,29 @@ def main(): raise ValueError("No instructions with valid timestamps found") logger.info(f"Loading configuration from {args.config_path if args.config_path else 'default location'}") - config = load_config(args.config_path) - converter = ChromeTracingConverter(trace_parser, config, args.exclude_exec, args.exclude_pipeline, args.only_committed, args.store_completions) - events = converter.convert(progress=not args.quiet) + all_instructions = trace_parser.instructions + core_ids = trace_parser.get_core_ids() + input_stem = Path(input_file).stem + progress = not args.quiet - logger.info(f"Writing {output_file}") - - with (gzip.open if args.gzip else open)(output_file, 'wt', encoding='utf-8') as f: - json.dump(events, f, indent=2) - - logger.info(f"Total events: {len(events)}") + if len(core_ids) == 1: + core_id = core_ids[0] + core_output = _make_output_path(output_dir, input_stem, core_id, args.gzip) + total = _convert_and_dump(trace_parser, config, args, core_output, progress) + logger.info(f"Total events: {total}") + else: + logger.info(f"Detected {len(core_ids)} cores: {core_ids}") + for core_id in core_ids: + trace_parser.instructions = { + seq: instr + for seq, instr in all_instructions.items() + if instr.core_id == core_id + } + core_output = _make_output_path(output_dir, input_stem, core_id, args.gzip) + total = _convert_and_dump(trace_parser, config, args, core_output, progress) + logger.info(f"Core {core_id}: {total} events") except ValueError as e: logging.error(f"Value error: {e}") diff --git a/src/uScope/parser.py b/src/uScope/parser.py index dd128fa..381e4de 100644 --- a/src/uScope/parser.py +++ b/src/uScope/parser.py @@ -3,12 +3,15 @@ class PipeViewParser: PREFIX = "O3PipeView:" + USCOPE_PREFIX = "uScopeView:" def __init__(self): self.instructions = {} + self.current_core_id = None self.current_seq_num = None self.current_instr = None self.stage_map = {f"{stage}": stage for stage in PipelineStage.order()} + self.pending_producers = {} def parse_file(self, filename: str): with open(filename, "r") as f: @@ -18,21 +21,32 @@ def parse_file(self, filename: str): self.parse_line(line) if self.current_instr is not None: - self.instructions[self.current_seq_num] = self.current_instr + self.instructions[(self.current_core_id, self.current_seq_num)] = self.current_instr self.instructions = { - seq: instr - for seq, instr in self.instructions.items() + key: instr + for key, instr in self.instructions.items() if any(tick > 0 for tick in instr.stages.values()) } + def get_core_ids(self): + return sorted(set(instr.core_id for instr in self.instructions.values())) + @staticmethod def _parse_fetch_line(rest: str): parts = rest.split(":", 5) - if len(parts) != 6: + if len(parts) < 5: return None - tick_str, pc, _, seq_str, disasm, opclass = parts - return int(tick_str), pc, int(seq_str), disasm.strip(), opclass.strip() + tick_str, pc, pos2, seq_str, disasm = parts[:5] + opclass = parts[5].strip() if len(parts) > 5 else "" + return int(tick_str), pc, int(pos2), int(seq_str), disasm.strip(), opclass + + @staticmethod + def _parse_usinfo_line(rest: str): + parts = rest.split(":", 2) + if len(parts) != 3: + return None + return int(parts[0]), int(parts[1]), parts[2].strip() @staticmethod def _parse_stage_line(rest: str): @@ -52,21 +66,86 @@ def _parse_stage_line(rest: str): store_tick = 0 return stage_name, tick, store_tick + @staticmethod + def _parse_deps_line(rest: str): + first = rest.index(":") + core_id = int(rest[:first]) + rest = rest[first + 1 :] + second = rest.index(":") + seq_num = int(rest[:second]) + producers_str = rest[second + 1 :] + if producers_str: + producers = [int(p) for p in producers_str.split(",")] + else: + producers = [] + return core_id, seq_num, producers + + def _apply_producers(self, core_id, seq_num, producers): + instr = self.instructions.get((core_id, seq_num)) + if instr is not None: + instr.producers = list(set(instr.producers) | set(producers)) + else: + existing = self.pending_producers.get((core_id, seq_num)) + if existing is not None: + existing.extend(p for p in producers if p not in existing) + else: + self.pending_producers[(core_id, seq_num)] = list(producers) + + def _merge_producers(self, core_id, seq_num, producers): + instr = self.instructions.get((core_id, seq_num)) + if instr is not None: + existing = set(instr.producers) + for p in producers: + if p not in existing: + instr.producers.append(p) + existing.add(p) + else: + existing = self.pending_producers.get((core_id, seq_num)) + if existing is not None: + for p in producers: + if p not in existing: + existing.append(p) + else: + self.pending_producers[(core_id, seq_num)] = list(producers) + def parse_line(self, line: str): - if not line.startswith(self.PREFIX): + is_usview = line.startswith(self.USCOPE_PREFIX) + if is_usview: + rest = line[len(self.USCOPE_PREFIX) :] + elif line.startswith(self.PREFIX): + rest = line[len(self.PREFIX) :] + else: return - rest = line[len(self.PREFIX) :] + if is_usview: + if rest.startswith("deps:"): + core_id, seq_num, producers = self._parse_deps_line(rest[5:]) + self._apply_producers(core_id, seq_num, producers) + return + if rest.startswith("memdeps:"): + core_id, seq_num, producers = self._parse_deps_line(rest[8:]) + self._merge_producers(core_id, seq_num, producers) + return + if rest.startswith("usinfo:"): + result = self._parse_usinfo_line(rest[7:]) + if result is not None: + us_core_id, us_seq_num, us_opclass = result + if self.current_instr is not None and self.current_seq_num == us_seq_num: + self.current_instr.core_id = us_core_id + self.current_instr.opclass = us_opclass + return + return if rest.startswith("fetch:"): result = self._parse_fetch_line(rest[6:]) if result is None: return - tick, pc, seq_num, disasm, opclass = result + tick, pc, core_id, seq_num, disasm, opclass = result if self.current_instr is not None: - self.instructions[self.current_seq_num] = self.current_instr + self.instructions[(self.current_core_id, self.current_seq_num)] = self.current_instr + self.current_core_id = core_id self.current_seq_num = seq_num self.current_instr = Instruction( seq_num=seq_num, @@ -75,10 +154,14 @@ def parse_line(self, line: str): opclass=opclass, stages={}, stage_order=[], + core_id=core_id, ) self.current_instr.stages[PipelineStage.FETCH] = tick self.current_instr.stage_order.append(PipelineStage.FETCH) + + if (core_id, seq_num) in self.pending_producers: + self.current_instr.producers = self.pending_producers.pop((core_id, seq_num)) return if self.current_instr is not None: diff --git a/tests/conftest.py b/tests/conftest.py index fdd1bed..4881c31 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -40,28 +40,31 @@ def minimal_parser() -> PipeViewParser: PipelineStage.RETIRE, ], ) - parser.instructions = {1: instr} + parser.instructions = {(0, 1): instr} return parser @pytest.fixture def trace_with_in_order(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3:IntAlu +O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3 +uScopeView:usinfo:0:1:IntAlu O3PipeView:decode:1100 O3PipeView:rename:1150 O3PipeView:dispatch:1200 O3PipeView:issue:1300 O3PipeView:complete:1400 O3PipeView:retire:1500:store:0 -O3PipeView:fetch:2000:0x1004:0:2:lw a0, 0(a1):MemRead +O3PipeView:fetch:2000:0x1004:0:2:lw a0, 0(a1) +uScopeView:usinfo:0:2:MemRead O3PipeView:decode:2100 O3PipeView:rename:2150 O3PipeView:dispatch:2200 O3PipeView:issue:2300 O3PipeView:complete:2400 O3PipeView:retire:2500:store:0 -O3PipeView:fetch:3000:0x1008:0:3:mul x10, x21, x11:IntMult +O3PipeView:fetch:3000:0x1008:0:3:mul x10, x21, x11 +uScopeView:usinfo:0:3:IntMult O3PipeView:decode:0 O3PipeView:rename:0 O3PipeView:dispatch:0 @@ -77,14 +80,16 @@ def trace_with_in_order(tmp_path: Path) -> Path: @pytest.fixture def trace_with_squashed(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:1000:0x1000:0:1:lw a1, 4(a1):MemRead +O3PipeView:fetch:1000:0x1000:0:1:lw a1, 4(a1) +uScopeView:usinfo:0:1:MemRead O3PipeView:decode:0 O3PipeView:rename:0 O3PipeView:dispatch:0 O3PipeView:issue:0 O3PipeView:complete:0 O3PipeView:retire:0:store:0 -O3PipeView:fetch:2000:0x1004:0:2:lw a0, 0(a1):MemRead +O3PipeView:fetch:2000:0x1004:0:2:lw a0, 0(a1) +uScopeView:usinfo:0:2:MemRead O3PipeView:decode:0 O3PipeView:rename:0 O3PipeView:dispatch:0 @@ -100,7 +105,8 @@ def trace_with_squashed(tmp_path: Path) -> Path: @pytest.fixture def trace_with_missing_stages(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3:IntAlu +O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3 +uScopeView:usinfo:0:1:IntAlu O3PipeView:decode:1100 O3PipeView:rename:1150 O3PipeView:issue:1300 @@ -115,7 +121,8 @@ def trace_with_missing_stages(tmp_path: Path) -> Path: @pytest.fixture def trace_with_empty_lines(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3:IntAlu +O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3 +uScopeView:usinfo:0:1:IntAlu O3PipeView:decode:1100 @@ -125,7 +132,8 @@ def trace_with_empty_lines(tmp_path: Path) -> Path: O3PipeView:complete:1400 O3PipeView:retire:1500:store:0 -O3PipeView:fetch:2000:0x2000:0:2:lw a0, 0(a1):MemRead +O3PipeView:fetch:2000:0x2000:0:2:lw a0, 0(a1) +uScopeView:usinfo:0:2:MemRead O3PipeView:decode:2100 O3PipeView:rename:2150 O3PipeView:dispatch:2200 @@ -142,7 +150,8 @@ def trace_with_empty_lines(tmp_path: Path) -> Path: def trace_with_invalid_lines(tmp_path: Path) -> Path: content = """\ This is a garbage line -O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3:IntAlu +O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3 +uScopeView:usinfo:0:1:IntAlu O3PipeView:decode:1100 something else O3PipeView:rename:1150 @@ -159,14 +168,16 @@ def trace_with_invalid_lines(tmp_path: Path) -> Path: @pytest.fixture def trace_with_ilp(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:1000:0x1000:0:1:add x3, x1, x2:IntAlu +O3PipeView:fetch:1000:0x1000:0:1:add x3, x1, x2 +uScopeView:usinfo:0:1:IntAlu O3PipeView:decode:1100 O3PipeView:rename:1150 O3PipeView:dispatch:1200 O3PipeView:issue:1300 O3PipeView:complete:1400 O3PipeView:retire:1500:store:0 -O3PipeView:fetch:1000:0x1004:0:2:add x3, x2, x4:IntAlu +O3PipeView:fetch:1000:0x1004:0:2:add x3, x2, x4 +uScopeView:usinfo:0:2:IntAlu O3PipeView:decode:1100 O3PipeView:rename:1150 O3PipeView:dispatch:1200 @@ -182,21 +193,24 @@ def trace_with_ilp(tmp_path: Path) -> Path: @pytest.fixture def trace_with_pipelined(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:137000:0x000101b4:0:53:div a7, a4, a5:IntDiv +O3PipeView:fetch:137000:0x000101b4:0:53:div a7, a4, a5 +uScopeView:usinfo:0:53:IntDiv O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 O3PipeView:issue:192500 O3PipeView:complete:202500 O3PipeView:retire:203500:store:0 -O3PipeView:fetch:137000:0x000101b8:0:54:add s2, a6, a7:IntAlu +O3PipeView:fetch:137000:0x000101b8:0:54:add s2, a6, a7 +uScopeView:usinfo:0:54:IntAlu O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 O3PipeView:issue:202500 O3PipeView:complete:203000 O3PipeView:retire:204000:store:0 -O3PipeView:fetch:137000:0x000101bc:0:55:sw s2, 0(a2):MemWrite +O3PipeView:fetch:137000:0x000101bc:0:55:sw s2, 0(a2) +uScopeView:usinfo:0:55:MemWrite O3PipeView:decode:137500 O3PipeView:rename:138000 O3PipeView:dispatch:139000 @@ -212,28 +226,32 @@ def trace_with_pipelined(tmp_path: Path) -> Path: @pytest.fixture def trace_with_unordered(tmp_path: Path) -> Path: content = """\ -O3PipeView:fetch:78500:0x00010148:0:2:ld a0, 548(a0):MemRead +O3PipeView:fetch:78500:0x00010148:0:2:ld a0, 548(a0) +uScopeView:usinfo:0:2:MemRead O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 O3PipeView:issue:81000 O3PipeView:complete:81500 O3PipeView:retire:137000:store:0 -O3PipeView:fetch:78500:0x00010154:0:5:auipc a2, 1:IntAlu +O3PipeView:fetch:78500:0x00010154:0:5:auipc a2, 1 +uScopeView:usinfo:0:5:IntAlu O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 O3PipeView:issue:80500 O3PipeView:complete:81000 O3PipeView:retire:141000:store:0 -O3PipeView:fetch:78500:0x0001015c:0:7:addi a3, zero, 2:IntAlu +O3PipeView:fetch:78500:0x0001015c:0:7:addi a3, zero, 2 +uScopeView:usinfo:0:7:IntAlu O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 O3PipeView:issue:80500 O3PipeView:complete:81000 O3PipeView:retire:141500:store:0 -O3PipeView:fetch:78500:0x00010150:0:4:ld a1, 548(a1):MemRead +O3PipeView:fetch:78500:0x00010150:0:4:ld a1, 548(a1) +uScopeView:usinfo:0:4:MemRead O3PipeView:decode:79000 O3PipeView:rename:79500 O3PipeView:dispatch:80500 @@ -244,3 +262,85 @@ def trace_with_unordered(tmp_path: Path) -> Path: trace_file = tmp_path.joinpath("trace_with_unordered.out") trace_file.write_text(content) return trace_file + + +@pytest.fixture +def trace_with_deps(tmp_path: Path) -> Path: + content = """\ +uScopeView:deps:0:4:2,3 +uScopeView:deps:0:3:1 +uScopeView:deps:0:2:1 +uScopeView:deps:0:1: +O3PipeView:fetch:1000:0x1000:0:1:add x4, x1, x2 +uScopeView:usinfo:0:1:IntAlu +O3PipeView:decode:1100 +O3PipeView:rename:1150 +O3PipeView:dispatch:1200 +O3PipeView:issue:1300 +O3PipeView:complete:1400 +O3PipeView:retire:1500:store:0 +O3PipeView:fetch:2000:0x1004:0:2:add x5, x3, x4 +uScopeView:usinfo:0:2:IntAlu +O3PipeView:decode:2100 +O3PipeView:rename:2150 +O3PipeView:dispatch:2200 +O3PipeView:issue:2300 +O3PipeView:complete:2400 +O3PipeView:retire:2500:store:0 +O3PipeView:fetch:3000:0x1008:0:3:add x6, x5, x1 +uScopeView:usinfo:0:3:IntAlu +O3PipeView:decode:3100 +O3PipeView:rename:3150 +O3PipeView:dispatch:3200 +O3PipeView:issue:3300 +O3PipeView:complete:3400 +O3PipeView:retire:3500:store:0 +O3PipeView:fetch:4000:0x100c:0:4:sw x6, 0(a0) +uScopeView:usinfo:0:4:MemWrite +O3PipeView:decode:4100 +O3PipeView:rename:4150 +O3PipeView:dispatch:4200 +O3PipeView:issue:4300 +O3PipeView:complete:4400 +O3PipeView:retire:4500:store:0 +""" + trace_file = tmp_path.joinpath("trace_with_deps.out") + trace_file.write_text(content) + return trace_file + + +@pytest.fixture +def trace_with_deps_and_memdeps(tmp_path: Path) -> Path: + content = """\ +uScopeView:deps:0:3:1 +uScopeView:deps:0:2:1 +uScopeView:deps:0:1: +uScopeView:memdeps:0:3:2 +O3PipeView:fetch:1000:0x1000:0:1:add x1, x2, x3 +uScopeView:usinfo:0:1:IntAlu +O3PipeView:decode:1100 +O3PipeView:rename:1150 +O3PipeView:dispatch:1200 +O3PipeView:issue:1300 +O3PipeView:complete:1400 +O3PipeView:retire:1500:store:0 +O3PipeView:fetch:2000:0x1004:0:2:sw x1, 0(a0) +uScopeView:usinfo:0:2:MemWrite +O3PipeView:decode:2100 +O3PipeView:rename:2150 +O3PipeView:dispatch:2200 +O3PipeView:issue:2300 +O3PipeView:complete:2400 +O3PipeView:retire:2500:store:0 +O3PipeView:fetch:3000:0x1008:0:3:lw x2, 0(a0) +uScopeView:usinfo:0:3:MemRead +O3PipeView:decode:3100 +O3PipeView:rename:3150 +O3PipeView:dispatch:3200 +O3PipeView:issue:3300 +O3PipeView:complete:3400 +O3PipeView:retire:3500:store:0 +""" + trace_file = tmp_path.joinpath("trace_with_deps_and_memdeps.out") + trace_file.write_text(content) + return trace_file diff --git a/tests/test_flow.py b/tests/test_flow.py new file mode 100644 index 0000000..120f215 --- /dev/null +++ b/tests/test_flow.py @@ -0,0 +1,216 @@ +import pytest + +from uScope.O3 import PipelineStage +from uScope.converter import ChromeTracingConverter +from uScope.parser import PipeViewParser +from uScope.events import FlowEvent +from uScope.config import Config + + +PIPELINE_CATS = frozenset({ + "Fetch", "Decode", "Rename", "Dispatch", + "Issue", "Complete", "Retire", "Store Complete", +}) + + +def assert_producers(parser, seq_num, expected, core_id=0): + assert parser.instructions[(core_id, seq_num)].producers == expected + + +def find_fu_event(events, seq_num): + return next( + e for e in events + if e.get("ph") == "X" + and e.get("args", {}).get("SeqNum") == seq_num + and e.get("cat") not in PIPELINE_CATS + ) + + +def assert_flow_counts(events, expected_pairs): + s_events = [e for e in events if e.get("ph") == "s"] + f_events = [e for e in events if e.get("ph") == "f"] + assert len(s_events) == expected_pairs + assert len(f_events) == expected_pairs + return s_events, f_events + + +def assert_flow_paired(flow_s, flow_f): + assert {e["id"] for e in flow_s} == {e["id"] for e in flow_f} + + +def assert_flows_after_fu(events, seq_num, expected_s, expected_f): + fu = find_fu_event(events, seq_num) + idx = events.index(fu) + s_after = [] + f_after = [] + for j in range(idx + 1, len(events)): + ph = events[j].get("ph") + if ph == "s": + s_after.append(events[j]) + elif ph == "f": + f_after.append(events[j]) + elif ph == "X": + break + assert len(s_after) == expected_s + assert len(f_after) == expected_f + return s_after, f_after + + +def flow_event(**kwargs): + kwargs.setdefault("name", "dep") + return FlowEvent(**kwargs) + + +class TestParseDeps: + + def test_parse_deps(self, trace_with_deps): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps)) + + assert_producers(parser, 1, []) + assert_producers(parser, 2, [1]) + assert_producers(parser, 3, [1]) + assert_producers(parser, 4, [2, 3]) + + def test_parse_deps_before_fetch(self): + parser = PipeViewParser() + parser.parse_line("uScopeView:deps:0:2:1") + assert parser.pending_producers[(0, 2)] == [1] + + parser.parse_line("O3PipeView:fetch:1000:0x1000:0:2:add x1,x2,x3:IntAlu") + assert parser.current_instr.producers == [1] + assert (0, 2) not in parser.pending_producers + + parser.parse_line("O3PipeView:fetch:2000:0x1004:0:3:add x4,x5,x6:IntAlu") + assert_producers(parser, 2, [1]) + + def test_parse_deps_line(self): + parser = PipeViewParser() + core, seq, prods = parser._parse_deps_line("0:42:1,2,3") + assert core == 0 + assert seq == 42 + assert prods == [1, 2, 3] + + core, seq, prods = parser._parse_deps_line("0:5:") + assert core == 0 + assert seq == 5 + assert prods == [] + + def test_parse_memdeps_merge(self, trace_with_deps_and_memdeps): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps_and_memdeps)) + + assert_producers(parser, 3, [1, 2]) + assert_producers(parser, 1, []) + assert_producers(parser, 2, [1]) + + def test_parse_memdeps_before_fetch(self): + parser = PipeViewParser() + parser.parse_line("uScopeView:deps:0:3:1") + parser.parse_line("uScopeView:memdeps:0:3:2") + assert parser.pending_producers[(0, 3)] == [1, 2] + + parser.parse_line("O3PipeView:fetch:3000:0x1008:0:3:lw x2,0(a0):MemRead") + assert parser.current_instr.producers == [1, 2] + + parser.parse_line("O3PipeView:fetch:4000:0x100c:0:4:add x7,x8,x9:IntAlu") + assert_producers(parser, 3, [1, 2]) + + def test_parse_memdeps_only(self): + parser = PipeViewParser() + parser.parse_line("uScopeView:memdeps:0:5:4") + assert parser.pending_producers[(0, 5)] == [4] + + parser.parse_line("O3PipeView:fetch:1000:0x1000:0:5:lw x5,0(a0):MemRead") + assert parser.current_instr.producers == [4] + + parser.parse_line("O3PipeView:fetch:2000:0x1004:0:6:add x7,x8,x9:IntAlu") + assert_producers(parser, 5, [4]) + + +class TestFlowEvents: + + def test_minimal(self): + e = flow_event(ph="s", id="1", bp="e", pid=200, tid=0, ts=100) + d = e.to_dict() + assert d["name"] == "dep" + assert d["ph"] == "s" + assert d["id"] == "1" + assert d["bp"] == "e" + assert d["pid"] == 200 + assert d["ts"] == 100 + assert "cat" not in d + assert "cname" not in d + + def test_with_cat(self): + e = flow_event(ph="f", id="42", bp="e", pid=201, tid=1, ts=200, + cat="ReadPort", cname="cq_build_attempt") + d = e.to_dict() + assert d["cat"] == "ReadPort" + assert d["cname"] == "cq_build_attempt" + assert d["ph"] == "f" + + def test_none_omitted(self): + e = flow_event(ph="s", id="1", bp="e", pid=200, ts=100) + d = e.to_dict() + assert "tid" not in d + + +class TestConverterFlows: + + def test_interleaving(self, trace_with_deps, config: Config): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps)) + converter = ChromeTracingConverter(parser, config, data_flow=True) + events = converter.convert() + + flow_s, flow_f = assert_flow_counts(events, 4) + + for fe in flow_s: + idx = events.index(fe) + prev_x = next(e for e in reversed(events[:idx]) + if e.get("ph") == "X" and e.get("pid") == fe["pid"]) + assert prev_x["pid"] == fe["pid"] + + def test_multiple_producers(self, trace_with_deps, config: Config): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps)) + converter = ChromeTracingConverter(parser, config, data_flow=True) + events = converter.convert() + + flow_s, flow_f = assert_flow_counts(events, 4) + assert_flow_paired(flow_s, flow_f) + + assert_flows_after_fu(events, 4, expected_s=0, expected_f=2) + assert_flows_after_fu(events, 1, expected_s=2, expected_f=0) + + def test_cat_from_producer(self, trace_with_deps, config: Config): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps)) + converter = ChromeTracingConverter(parser, config, data_flow=True) + events = converter.convert() + + flow_s = [e for e in events if e.get("ph") == "s"] + flow_f = [e for e in events if e.get("ph") == "f"] + + for s in flow_s: + assert "cat" in s + assert "cname" in s + f = next(e for e in flow_f if e["id"] == s["id"]) + assert s["cat"] == f["cat"] + + def test_excluded_exec(self, trace_with_deps, config: Config): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps)) + converter = ChromeTracingConverter(parser, config, data_flow=True, exclude_exec=True) + events = converter.convert() + + assert not [e for e in events if e.get("ph") in ("s", "f")] + + def test_data_flow_default_off(self, trace_with_deps, config: Config): + parser = PipeViewParser() + parser.parse_file(str(trace_with_deps)) + converter = ChromeTracingConverter(parser, config) + events = converter.convert() + + assert not [e for e in events if e.get("ph") in ("s", "f")] diff --git a/tests/test_main.py b/tests/test_main.py index 810b461..b707689 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -20,15 +20,17 @@ def test_main_basic(tmp_path: Path, monkeypatch): """ input_file.write_text(content) - output_file = tmp_path.joinpath("output.json") + output_dir = tmp_path.joinpath("output") + output_dir.mkdir() monkeypatch.setattr( sys, "argv", - ["uscope", "--input-file", str(input_file), "--output-file", str(output_file)], + ["uscope", "--input-file", str(input_file), "--output-dir", str(output_dir)], ) main() + output_file = output_dir.joinpath("trace_0.json") assert output_file.exists() data = json.loads(output_file.read_text()) assert isinstance(data, list) diff --git a/tests/test_parser.py b/tests/test_parser.py index dffc25e..4cad3e9 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -36,11 +36,11 @@ def assert_instruction( assert instr.stages[stage] == expected, f"Stage {stage} value mismatch" -def assert_instructions(parser, expected, stage_order): +def assert_instructions(parser, expected, stage_order, core_id=0): assert len(parser.instructions) == len(expected) for seq_num, (pc, disasm, opclass, stages) in expected.items(): assert_instruction( - instr=parser.instructions[seq_num], + instr=parser.instructions[(core_id, seq_num)], seq_num=seq_num, pc=pc, disasm=disasm, @@ -168,7 +168,7 @@ def test_parse_missing_stages(trace_with_missing_stages): ), } assert_instructions(parser, expected, expected_order) - assert PipelineStage.DISPATCH not in parser.instructions[1].stages + assert PipelineStage.DISPATCH not in parser.instructions[(0, 1)].stages def test_parse_empty_lines(trace_with_empty_lines):