Created
October 12, 2024 19:19
-
-
Save uenoku/1ac4ad69cdc6cbf76799f926ee94e585 to your computer and use it in GitHub Desktop.
FPU hw
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Created from https://github.com/circt/perf/blob/trunk/regress/FPU.fir | |
module { | |
hw.module @FPU(in %clock : !seq.clock, in %reset : i1, in %io_inst : i32, in %io_fromint_data : i64, in %io_fcsr_rm : i3, out io_fcsr_flags_valid : i1, out io_fcsr_flags_bits : i5, out io_store_data : i64, out io_toint_data : i64, in %io_dmem_resp_val : i1, in %io_dmem_resp_type : i3, in %io_dmem_resp_tag : i5, in %io_dmem_resp_data : i64, in %io_valid : i1, out io_fcsr_rdy : i1, out io_nack_mem : i1, out io_illegal_rm : i1, in %io_killx : i1, in %io_killm : i1, out io_dec_cmd : i5, out io_dec_ldst : i1, out io_dec_wen : i1, out io_dec_ren1 : i1, out io_dec_ren2 : i1, out io_dec_ren3 : i1, out io_dec_swap12 : i1, out io_dec_swap23 : i1, out io_dec_single : i1, out io_dec_fromint : i1, out io_dec_toint : i1, out io_dec_fastpipe : i1, out io_dec_fma : i1, out io_dec_div : i1, out io_dec_sqrt : i1, out io_dec_wflags : i1, out io_sboard_set : i1, out io_sboard_clr : i1, out io_sboard_clra : i5, out io_cp_req_ready : i1, in %io_cp_req_valid : i1, in %io_cp_req_bits_cmd : i5, in %io_cp_req_bits_ldst : i1, in %io_cp_req_bits_wen : i1, in %io_cp_req_bits_ren1 : i1, in %io_cp_req_bits_ren2 : i1, in %io_cp_req_bits_ren3 : i1, in %io_cp_req_bits_swap12 : i1, in %io_cp_req_bits_swap23 : i1, in %io_cp_req_bits_single : i1, in %io_cp_req_bits_fromint : i1, in %io_cp_req_bits_toint : i1, in %io_cp_req_bits_fastpipe : i1, in %io_cp_req_bits_fma : i1, in %io_cp_req_bits_div : i1, in %io_cp_req_bits_sqrt : i1, in %io_cp_req_bits_wflags : i1, in %io_cp_req_bits_rm : i3, in %io_cp_req_bits_typ : i2, in %io_cp_req_bits_in1 : i65, in %io_cp_req_bits_in2 : i65, in %io_cp_req_bits_in3 : i65, in %io_cp_resp_ready : i1, out io_cp_resp_valid : i1, out io_cp_resp_bits_data : i65, out io_cp_resp_bits_exc : i5) { | |
%c3_i3 = hw.constant 3 : i3 | |
%c1879179264_i32 = hw.constant 1879179264 : i32 | |
%c-1_i9 = hw.constant -1 : i9 | |
%c256_i10 = hw.constant 256 : i10 | |
%c0_i2 = hw.constant 0 : i2 | |
%c32_i7 = hw.constant 32 : i7 | |
%c-1_i4 = hw.constant -1 : i4 | |
%c0_i7 = hw.constant 0 : i7 | |
%c0_i109 = hw.constant 0 : i109 | |
%c0_i63 = hw.constant 0 : i63 | |
%c-1_i6 = hw.constant -1 : i6 | |
%c0_i32 = hw.constant 0 : i32 | |
%c0_i52 = hw.constant 0 : i52 | |
%c0_i11 = hw.constant 0 : i11 | |
%c0_i6 = hw.constant 0 : i6 | |
%c0_i49 = hw.constant 0 : i49 | |
%c0_i31 = hw.constant 0 : i31 | |
%c-1_i5 = hw.constant -1 : i5 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i9 = hw.constant 0 : i9 | |
%c0_i23 = hw.constant 0 : i23 | |
%c0_i8 = hw.constant 0 : i8 | |
%false = hw.constant false | |
%true = hw.constant true | |
%c-2_i2 = hw.constant -2 : i2 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c-1_i3 = hw.constant -1 : i3 | |
%c0_i3 = hw.constant 0 : i3 | |
%c0_i5 = hw.constant 0 : i5 | |
%c0_i65 = hw.constant 0 : i65 | |
%c1_i2 = hw.constant 1 : i2 | |
%c0_i4 = hw.constant 0 : i4 | |
%ex_reg_valid = seq.firreg %io_valid clock %clock reset sync %reset, %false {firrtl.random_init_start = 0 : ui64} : i1 | |
%0 = comb.or bin %ex_reg_valid, %io_cp_req_valid {sv.namehint = "req_valid"} : i1 | |
%ex_reg_inst = seq.firreg %1 clock %clock {firrtl.random_init_start = 1 : ui64} : i32 | |
%1 = comb.mux bin %io_valid, %io_inst, %ex_reg_inst : i32 | |
%2 = comb.and bin %459, %io_cp_req_valid {sv.namehint = "ex_cp_valid"} : i1 | |
%3 = comb.xor bin %io_killx, %true : i1 | |
%4 = comb.and bin %ex_reg_valid, %3 : i1 | |
%5 = comb.or bin %4, %2 : i1 | |
%mem_reg_valid = seq.firreg %5 clock %clock reset sync %reset, %false {firrtl.random_init_start = 33 : ui64} : i1 | |
%mem_reg_inst = seq.firreg %6 clock %clock {firrtl.random_init_start = 34 : ui64} : i32 | |
%6 = comb.mux bin %ex_reg_valid, %ex_reg_inst, %mem_reg_inst : i32 | |
%mem_cp_valid = seq.firreg %2 clock %clock reset sync %reset, %false {firrtl.random_init_start = 66 : ui64} : i1 | |
%7 = comb.or bin %io_killm, %480 : i1 | |
%8 = comb.xor bin %mem_cp_valid, %true : i1 | |
%9 = comb.and bin %7, %8 {sv.namehint = "killm"} : i1 | |
%10 = comb.xor bin %9, %true : i1 | |
%11 = comb.or bin %10, %mem_cp_valid : i1 | |
%12 = comb.and bin %mem_reg_valid, %11 : i1 | |
%wb_reg_valid = seq.firreg %12 clock %clock reset sync %reset, %false {firrtl.random_init_start = 67 : ui64} : i1 | |
%wb_cp_valid = seq.firreg %mem_cp_valid clock %clock reset sync %reset, %false {firrtl.random_init_start = 68 : ui64} : i1 | |
%fp_decoder.io_sigs_cmd, %fp_decoder.io_sigs_ldst, %fp_decoder.io_sigs_wen, %fp_decoder.io_sigs_ren1, %fp_decoder.io_sigs_ren2, %fp_decoder.io_sigs_ren3, %fp_decoder.io_sigs_swap12, %fp_decoder.io_sigs_swap23, %fp_decoder.io_sigs_single, %fp_decoder.io_sigs_fromint, %fp_decoder.io_sigs_toint, %fp_decoder.io_sigs_fastpipe, %fp_decoder.io_sigs_fma, %fp_decoder.io_sigs_div, %fp_decoder.io_sigs_sqrt, %fp_decoder.io_sigs_wflags = hw.instance "fp_decoder" @FPUDecoder(io_inst: %io_inst: i32) -> (io_sigs_cmd: i5, io_sigs_ldst: i1, io_sigs_wen: i1, io_sigs_ren1: i1, io_sigs_ren2: i1, io_sigs_ren3: i1, io_sigs_swap12: i1, io_sigs_swap23: i1, io_sigs_single: i1, io_sigs_fromint: i1, io_sigs_toint: i1, io_sigs_fastpipe: i1, io_sigs_fma: i1, io_sigs_div: i1, io_sigs_sqrt: i1, io_sigs_wflags: i1) {sv.namehint = "fp_decoder.io_sigs_div"} | |
%13 = seq.firreg %25 clock %clock {firrtl.random_init_start = 69 : ui64} : i5 | |
%14 = seq.firreg %26 clock %clock {firrtl.random_init_start = 74 : ui64} : i1 | |
%15 = seq.firreg %27 clock %clock {firrtl.random_init_start = 78 : ui64} : i1 | |
%16 = seq.firreg %28 clock %clock {firrtl.random_init_start = 80 : ui64} : i1 | |
%17 = seq.firreg %29 clock %clock {firrtl.random_init_start = 81 : ui64} : i1 | |
%18 = seq.firreg %30 clock %clock {firrtl.random_init_start = 82 : ui64} : i1 | |
%19 = seq.firreg %31 clock %clock {firrtl.random_init_start = 83 : ui64} : i1 | |
%20 = seq.firreg %32 clock %clock {firrtl.random_init_start = 84 : ui64} : i1 | |
%21 = seq.firreg %33 clock %clock {firrtl.random_init_start = 85 : ui64} : i1 | |
%22 = seq.firreg %34 clock %clock {firrtl.random_init_start = 86 : ui64} : i1 | |
%23 = seq.firreg %35 clock %clock {firrtl.random_init_start = 87 : ui64} : i1 | |
%24 = seq.firreg %36 clock %clock {firrtl.random_init_start = 88 : ui64} : i1 | |
%25 = comb.mux bin %io_valid, %fp_decoder.io_sigs_cmd, %13 : i5 | |
%26 = comb.mux bin %io_valid, %fp_decoder.io_sigs_ldst, %14 : i1 | |
%27 = comb.mux bin %io_valid, %fp_decoder.io_sigs_ren3, %15 : i1 | |
%28 = comb.mux bin %io_valid, %fp_decoder.io_sigs_swap23, %16 : i1 | |
%29 = comb.mux bin %io_valid, %fp_decoder.io_sigs_single, %17 : i1 | |
%30 = comb.mux bin %io_valid, %fp_decoder.io_sigs_fromint, %18 : i1 | |
%31 = comb.mux bin %io_valid, %fp_decoder.io_sigs_toint, %19 : i1 | |
%32 = comb.mux bin %io_valid, %fp_decoder.io_sigs_fastpipe, %20 : i1 | |
%33 = comb.mux bin %io_valid, %fp_decoder.io_sigs_fma, %21 : i1 | |
%34 = comb.mux bin %io_valid, %fp_decoder.io_sigs_div, %22 : i1 | |
%35 = comb.mux bin %io_valid, %fp_decoder.io_sigs_sqrt, %23 : i1 | |
%36 = comb.mux bin %io_valid, %fp_decoder.io_sigs_wflags, %24 : i1 | |
%37 = comb.extract %io_cp_req_bits_cmd from 0 : (i5) -> i4 | |
%38 = comb.extract %13 from 0 : (i5) -> i4 | |
%39 = comb.mux %2, %37, %38 {sv.namehint = "ex_ctrl_cmd"} : i4 | |
%40 = comb.mux bin %2, %io_cp_req_bits_single, %17 {sv.namehint = "ex_ctrl_single"} : i1 | |
%41 = comb.mux bin %2, %io_cp_req_bits_fromint, %18 {sv.namehint = "ex_ctrl_fromint"} : i1 | |
%42 = comb.mux bin %2, %io_cp_req_bits_toint, %19 {sv.namehint = "ex_ctrl_toint"} : i1 | |
%43 = comb.mux bin %2, %io_cp_req_bits_fastpipe, %20 {sv.namehint = "ex_ctrl_fastpipe"} : i1 | |
%44 = comb.mux bin %2, %io_cp_req_bits_fma, %21 {sv.namehint = "ex_ctrl_fma"} : i1 | |
%45 = comb.mux bin %2, %io_cp_req_bits_div, %22 {sv.namehint = "ex_ctrl_div"} : i1 | |
%46 = comb.mux bin %2, %io_cp_req_bits_sqrt, %23 {sv.namehint = "ex_ctrl_sqrt"} : i1 | |
%47 = comb.mux bin %2, %io_cp_req_bits_wflags, %24 {sv.namehint = "ex_ctrl_wflags"} : i1 | |
%mem_ctrl_single = seq.firreg %48 clock %clock {firrtl.random_init_start = 101 : ui64} : i1 | |
%mem_ctrl_fromint = seq.firreg %49 clock %clock {firrtl.random_init_start = 102 : ui64} : i1 | |
%mem_ctrl_toint = seq.firreg %50 clock %clock {firrtl.random_init_start = 103 : ui64} : i1 | |
%mem_ctrl_fastpipe = seq.firreg %51 clock %clock {firrtl.random_init_start = 104 : ui64} : i1 | |
%mem_ctrl_fma = seq.firreg %52 clock %clock {firrtl.random_init_start = 105 : ui64} : i1 | |
%mem_ctrl_div = seq.firreg %53 clock %clock {firrtl.random_init_start = 106 : ui64} : i1 | |
%mem_ctrl_sqrt = seq.firreg %54 clock %clock {firrtl.random_init_start = 107 : ui64, sv.namehint = "DivSqrtRecF64.io_sqrtOp"} : i1 | |
%mem_ctrl_wflags = seq.firreg %55 clock %clock {firrtl.random_init_start = 108 : ui64} : i1 | |
%48 = comb.mux bin %0, %40, %mem_ctrl_single : i1 | |
%49 = comb.mux bin %0, %41, %mem_ctrl_fromint : i1 | |
%50 = comb.mux bin %0, %42, %mem_ctrl_toint : i1 | |
%51 = comb.mux bin %0, %43, %mem_ctrl_fastpipe : i1 | |
%52 = comb.mux bin %0, %44, %mem_ctrl_fma : i1 | |
%53 = comb.mux bin %0, %45, %mem_ctrl_div : i1 | |
%54 = comb.mux bin %0, %46, %mem_ctrl_sqrt : i1 | |
%55 = comb.mux bin %0, %47, %mem_ctrl_wflags : i1 | |
%wb_ctrl_toint = seq.firreg %56 clock %clock {firrtl.random_init_start = 123 : ui64} : i1 | |
%56 = comb.mux bin %mem_reg_valid, %mem_ctrl_toint, %wb_ctrl_toint : i1 | |
%load_wb = seq.firreg %io_dmem_resp_val clock %clock {firrtl.random_init_start = 129 : ui64} : i1 | |
%57 = comb.extract %io_dmem_resp_type from 0 : (i3) -> i1 | |
%58 = comb.xor bin %57, %true : i1 | |
%load_wb_single = seq.firreg %59 clock %clock {firrtl.random_init_start = 130 : ui64} : i1 | |
%59 = comb.mux bin %io_dmem_resp_val, %58, %load_wb_single : i1 | |
%load_wb_data = seq.firreg %60 clock %clock {firrtl.random_init_start = 131 : ui64} : i64 | |
%60 = comb.mux bin %io_dmem_resp_val, %io_dmem_resp_data, %load_wb_data : i64 | |
%load_wb_tag = seq.firreg %61 clock %clock {firrtl.random_init_start = 195 : ui64} : i5 | |
%61 = comb.mux bin %io_dmem_resp_val, %io_dmem_resp_tag, %load_wb_tag : i5 | |
%62 = comb.extract %load_wb_data from 31 : (i64) -> i1 | |
%63 = comb.extract %load_wb_data from 23 : (i64) -> i8 | |
%64 = comb.extract %load_wb_data from 0 : (i64) -> i23 | |
%65 = comb.icmp bin eq %63, %c0_i8 : i8 | |
%66 = comb.icmp bin ne %64, %c0_i23 : i23 | |
%67 = comb.xor bin %66, %true : i1 | |
%68 = comb.and bin %65, %67 : i1 | |
%69 = comb.extract %load_wb_data from 7 : (i64) -> i16 | |
%70 = comb.icmp bin ne %69, %c0_i16 : i16 | |
%71 = comb.extract %load_wb_data from 15 : (i64) -> i8 | |
%72 = comb.icmp bin ne %71, %c0_i8 : i8 | |
%73 = comb.extract %load_wb_data from 19 : (i64) -> i4 | |
%74 = comb.icmp bin ne %73, %c0_i4 : i4 | |
%75 = comb.extract %load_wb_data from 22 : (i64) -> i1 | |
%76 = comb.extract %load_wb_data from 21 : (i64) -> i1 | |
%77 = comb.extract %load_wb_data from 20 : (i64) -> i1 | |
%78 = comb.concat %false, %77 : i1, i1 | |
%79 = comb.mux bin %76, %c-2_i2, %78 : i2 | |
%80 = comb.mux bin %75, %c-1_i2, %79 : i2 | |
%81 = comb.extract %load_wb_data from 18 : (i64) -> i1 | |
%82 = comb.extract %load_wb_data from 17 : (i64) -> i1 | |
%83 = comb.extract %load_wb_data from 16 : (i64) -> i1 | |
%84 = comb.concat %false, %83 : i1, i1 | |
%85 = comb.mux bin %82, %c-2_i2, %84 : i2 | |
%86 = comb.mux bin %81, %c-1_i2, %85 : i2 | |
%87 = comb.mux bin %74, %80, %86 : i2 | |
%88 = comb.concat %74, %87 : i1, i2 | |
%89 = comb.extract %load_wb_data from 11 : (i64) -> i4 | |
%90 = comb.icmp bin ne %89, %c0_i4 : i4 | |
%91 = comb.extract %load_wb_data from 14 : (i64) -> i1 | |
%92 = comb.extract %load_wb_data from 13 : (i64) -> i1 | |
%93 = comb.extract %load_wb_data from 12 : (i64) -> i1 | |
%94 = comb.concat %false, %93 : i1, i1 | |
%95 = comb.mux bin %92, %c-2_i2, %94 : i2 | |
%96 = comb.mux bin %91, %c-1_i2, %95 : i2 | |
%97 = comb.extract %load_wb_data from 10 : (i64) -> i1 | |
%98 = comb.extract %load_wb_data from 9 : (i64) -> i1 | |
%99 = comb.extract %load_wb_data from 8 : (i64) -> i1 | |
%100 = comb.concat %false, %99 : i1, i1 | |
%101 = comb.mux bin %98, %c-2_i2, %100 : i2 | |
%102 = comb.mux bin %97, %c-1_i2, %101 : i2 | |
%103 = comb.mux bin %90, %96, %102 : i2 | |
%104 = comb.concat %90, %103 : i1, i2 | |
%105 = comb.mux bin %72, %88, %104 : i3 | |
%106 = comb.concat %72, %105 : i1, i3 | |
%107 = comb.extract %load_wb_data from 0 : (i64) -> i7 | |
%108 = comb.icmp bin ne %107, %c0_i7 : i7 | |
%109 = comb.extract %load_wb_data from 3 : (i64) -> i4 | |
%110 = comb.icmp bin ne %109, %c0_i4 : i4 | |
%111 = comb.extract %load_wb_data from 6 : (i64) -> i1 | |
%112 = comb.extract %load_wb_data from 5 : (i64) -> i1 | |
%113 = comb.extract %load_wb_data from 4 : (i64) -> i1 | |
%114 = comb.concat %false, %113 : i1, i1 | |
%115 = comb.mux bin %112, %c-2_i2, %114 : i2 | |
%116 = comb.mux bin %111, %c-1_i2, %115 : i2 | |
%117 = comb.extract %load_wb_data from 2 : (i64) -> i1 | |
%118 = comb.extract %load_wb_data from 1 : (i64) -> i1 | |
%119 = comb.extract %load_wb_data from 0 : (i64) -> i1 | |
%120 = comb.concat %false, %119 : i1, i1 | |
%121 = comb.mux bin %118, %c-2_i2, %120 : i2 | |
%122 = comb.mux bin %117, %c-1_i2, %121 : i2 | |
%123 = comb.mux bin %110, %116, %122 : i2 | |
%124 = comb.concat %110, %123 : i1, i2 | |
%125 = comb.mux bin %108, %124, %c0_i3 : i3 | |
%126 = comb.concat %108, %125 : i1, i3 | |
%127 = comb.mux bin %70, %106, %126 : i4 | |
%128 = comb.concat %70, %127 : i1, i4 | |
%129 = comb.xor bin %128, %c-1_i5 : i5 | |
%130 = comb.concat %c0_i31, %64 : i31, i23 | |
%131 = comb.concat %c0_i49, %129 : i49, i5 | |
%132 = comb.shl bin %130, %131 : i54 | |
%133 = comb.extract %132 from 0 : (i54) -> i22 | |
%134 = comb.concat %133, %false : i22, i1 | |
%135 = comb.concat %c-1_i4, %70, %127 : i4, i1, i4 | |
%136 = comb.concat %false, %63 : i1, i8 | |
%137 = comb.mux bin %65, %135, %136 : i9 | |
%138 = comb.mux bin %65, %c-2_i2, %c1_i2 : i2 | |
%139 = comb.concat %c32_i7, %138 : i7, i2 | |
%140 = comb.add %137, %139 : i9 | |
%141 = comb.extract %140 from 7 : (i9) -> i2 | |
%142 = comb.icmp bin eq %141, %c-1_i2 : i2 | |
%143 = comb.and bin %142, %66 : i1 | |
%144 = comb.replicate %68 : (i1) -> i3 | |
%145 = comb.xor %144, %c-1_i3 : i3 | |
%146 = comb.concat %143, %c0_i6 : i1, i6 | |
%147 = comb.extract %145 from 1 : (i3) -> i2 | |
%148 = comb.and bin %141, %147 : i2 | |
%149 = comb.extract %140 from 0 : (i9) -> i7 | |
%150 = comb.extract %145 from 0 : (i3) -> i1 | |
%151 = comb.concat %150, %c-1_i6 : i1, i6 | |
%152 = comb.and bin %149, %151 : i7 | |
%153 = comb.or bin %152, %146 : i7 | |
%154 = comb.mux bin %65, %134, %64 : i23 | |
%155 = comb.extract %load_wb_data from 63 : (i64) -> i1 | |
%156 = comb.extract %load_wb_data from 52 : (i64) -> i11 | |
%157 = comb.extract %load_wb_data from 0 : (i64) -> i52 | |
%158 = comb.icmp bin eq %156, %c0_i11 : i11 | |
%159 = comb.icmp bin ne %157, %c0_i52 : i52 | |
%160 = comb.xor bin %159, %true : i1 | |
%161 = comb.and bin %158, %160 : i1 | |
%162 = comb.extract %load_wb_data from 20 : (i64) -> i32 | |
%163 = comb.icmp bin ne %162, %c0_i32 : i32 | |
%164 = comb.extract %load_wb_data from 36 : (i64) -> i16 | |
%165 = comb.icmp bin ne %164, %c0_i16 : i16 | |
%166 = comb.extract %load_wb_data from 44 : (i64) -> i8 | |
%167 = comb.icmp bin ne %166, %c0_i8 : i8 | |
%168 = comb.extract %load_wb_data from 48 : (i64) -> i4 | |
%169 = comb.icmp bin ne %168, %c0_i4 : i4 | |
%170 = comb.extract %load_wb_data from 51 : (i64) -> i1 | |
%171 = comb.extract %load_wb_data from 50 : (i64) -> i1 | |
%172 = comb.extract %load_wb_data from 49 : (i64) -> i1 | |
%173 = comb.concat %false, %172 : i1, i1 | |
%174 = comb.mux bin %171, %c-2_i2, %173 : i2 | |
%175 = comb.mux bin %170, %c-1_i2, %174 : i2 | |
%176 = comb.extract %load_wb_data from 47 : (i64) -> i1 | |
%177 = comb.extract %load_wb_data from 46 : (i64) -> i1 | |
%178 = comb.extract %load_wb_data from 45 : (i64) -> i1 | |
%179 = comb.concat %false, %178 : i1, i1 | |
%180 = comb.mux bin %177, %c-2_i2, %179 : i2 | |
%181 = comb.mux bin %176, %c-1_i2, %180 : i2 | |
%182 = comb.mux bin %169, %175, %181 : i2 | |
%183 = comb.concat %169, %182 : i1, i2 | |
%184 = comb.extract %load_wb_data from 40 : (i64) -> i4 | |
%185 = comb.icmp bin ne %184, %c0_i4 : i4 | |
%186 = comb.extract %load_wb_data from 43 : (i64) -> i1 | |
%187 = comb.extract %load_wb_data from 42 : (i64) -> i1 | |
%188 = comb.extract %load_wb_data from 41 : (i64) -> i1 | |
%189 = comb.concat %false, %188 : i1, i1 | |
%190 = comb.mux bin %187, %c-2_i2, %189 : i2 | |
%191 = comb.mux bin %186, %c-1_i2, %190 : i2 | |
%192 = comb.extract %load_wb_data from 39 : (i64) -> i1 | |
%193 = comb.extract %load_wb_data from 38 : (i64) -> i1 | |
%194 = comb.extract %load_wb_data from 37 : (i64) -> i1 | |
%195 = comb.concat %false, %194 : i1, i1 | |
%196 = comb.mux bin %193, %c-2_i2, %195 : i2 | |
%197 = comb.mux bin %192, %c-1_i2, %196 : i2 | |
%198 = comb.mux bin %185, %191, %197 : i2 | |
%199 = comb.concat %185, %198 : i1, i2 | |
%200 = comb.mux bin %167, %183, %199 : i3 | |
%201 = comb.concat %167, %200 : i1, i3 | |
%202 = comb.extract %load_wb_data from 28 : (i64) -> i8 | |
%203 = comb.icmp bin ne %202, %c0_i8 : i8 | |
%204 = comb.extract %load_wb_data from 32 : (i64) -> i4 | |
%205 = comb.icmp bin ne %204, %c0_i4 : i4 | |
%206 = comb.extract %load_wb_data from 35 : (i64) -> i1 | |
%207 = comb.extract %load_wb_data from 34 : (i64) -> i1 | |
%208 = comb.extract %load_wb_data from 33 : (i64) -> i1 | |
%209 = comb.concat %false, %208 : i1, i1 | |
%210 = comb.mux bin %207, %c-2_i2, %209 : i2 | |
%211 = comb.mux bin %206, %c-1_i2, %210 : i2 | |
%212 = comb.extract %load_wb_data from 31 : (i64) -> i1 | |
%213 = comb.extract %load_wb_data from 30 : (i64) -> i1 | |
%214 = comb.extract %load_wb_data from 29 : (i64) -> i1 | |
%215 = comb.concat %false, %214 : i1, i1 | |
%216 = comb.mux bin %213, %c-2_i2, %215 : i2 | |
%217 = comb.mux bin %212, %c-1_i2, %216 : i2 | |
%218 = comb.mux bin %205, %211, %217 : i2 | |
%219 = comb.concat %205, %218 : i1, i2 | |
%220 = comb.extract %load_wb_data from 24 : (i64) -> i4 | |
%221 = comb.icmp bin ne %220, %c0_i4 : i4 | |
%222 = comb.extract %load_wb_data from 27 : (i64) -> i1 | |
%223 = comb.extract %load_wb_data from 26 : (i64) -> i1 | |
%224 = comb.extract %load_wb_data from 25 : (i64) -> i1 | |
%225 = comb.concat %false, %224 : i1, i1 | |
%226 = comb.mux bin %223, %c-2_i2, %225 : i2 | |
%227 = comb.mux bin %222, %c-1_i2, %226 : i2 | |
%228 = comb.extract %load_wb_data from 23 : (i64) -> i1 | |
%229 = comb.extract %load_wb_data from 22 : (i64) -> i1 | |
%230 = comb.extract %load_wb_data from 21 : (i64) -> i1 | |
%231 = comb.concat %false, %230 : i1, i1 | |
%232 = comb.mux bin %229, %c-2_i2, %231 : i2 | |
%233 = comb.mux bin %228, %c-1_i2, %232 : i2 | |
%234 = comb.mux bin %221, %227, %233 : i2 | |
%235 = comb.concat %221, %234 : i1, i2 | |
%236 = comb.mux bin %203, %219, %235 : i3 | |
%237 = comb.concat %203, %236 : i1, i3 | |
%238 = comb.mux bin %165, %201, %237 : i4 | |
%239 = comb.concat %165, %238 : i1, i4 | |
%240 = comb.extract %load_wb_data from 4 : (i64) -> i16 | |
%241 = comb.icmp bin ne %240, %c0_i16 : i16 | |
%242 = comb.extract %load_wb_data from 12 : (i64) -> i8 | |
%243 = comb.icmp bin ne %242, %c0_i8 : i8 | |
%244 = comb.extract %load_wb_data from 16 : (i64) -> i4 | |
%245 = comb.icmp bin ne %244, %c0_i4 : i4 | |
%246 = comb.extract %load_wb_data from 19 : (i64) -> i1 | |
%247 = comb.extract %load_wb_data from 18 : (i64) -> i1 | |
%248 = comb.extract %load_wb_data from 17 : (i64) -> i1 | |
%249 = comb.concat %false, %248 : i1, i1 | |
%250 = comb.mux bin %247, %c-2_i2, %249 : i2 | |
%251 = comb.mux bin %246, %c-1_i2, %250 : i2 | |
%252 = comb.extract %load_wb_data from 15 : (i64) -> i1 | |
%253 = comb.extract %load_wb_data from 14 : (i64) -> i1 | |
%254 = comb.extract %load_wb_data from 13 : (i64) -> i1 | |
%255 = comb.concat %false, %254 : i1, i1 | |
%256 = comb.mux bin %253, %c-2_i2, %255 : i2 | |
%257 = comb.mux bin %252, %c-1_i2, %256 : i2 | |
%258 = comb.mux bin %245, %251, %257 : i2 | |
%259 = comb.concat %245, %258 : i1, i2 | |
%260 = comb.extract %load_wb_data from 8 : (i64) -> i4 | |
%261 = comb.icmp bin ne %260, %c0_i4 : i4 | |
%262 = comb.extract %load_wb_data from 11 : (i64) -> i1 | |
%263 = comb.extract %load_wb_data from 10 : (i64) -> i1 | |
%264 = comb.extract %load_wb_data from 9 : (i64) -> i1 | |
%265 = comb.concat %false, %264 : i1, i1 | |
%266 = comb.mux bin %263, %c-2_i2, %265 : i2 | |
%267 = comb.mux bin %262, %c-1_i2, %266 : i2 | |
%268 = comb.extract %load_wb_data from 7 : (i64) -> i1 | |
%269 = comb.extract %load_wb_data from 6 : (i64) -> i1 | |
%270 = comb.extract %load_wb_data from 5 : (i64) -> i1 | |
%271 = comb.concat %false, %270 : i1, i1 | |
%272 = comb.mux bin %269, %c-2_i2, %271 : i2 | |
%273 = comb.mux bin %268, %c-1_i2, %272 : i2 | |
%274 = comb.mux bin %261, %267, %273 : i2 | |
%275 = comb.concat %261, %274 : i1, i2 | |
%276 = comb.mux bin %243, %259, %275 : i3 | |
%277 = comb.concat %243, %276 : i1, i3 | |
%278 = comb.extract %load_wb_data from 0 : (i64) -> i4 | |
%279 = comb.icmp bin ne %278, %c0_i4 : i4 | |
%280 = comb.extract %load_wb_data from 0 : (i64) -> i4 | |
%281 = comb.icmp bin ne %280, %c0_i4 : i4 | |
%282 = comb.extract %load_wb_data from 3 : (i64) -> i1 | |
%283 = comb.extract %load_wb_data from 2 : (i64) -> i1 | |
%284 = comb.extract %load_wb_data from 1 : (i64) -> i1 | |
%285 = comb.concat %false, %284 : i1, i1 | |
%286 = comb.mux bin %283, %c-2_i2, %285 : i2 | |
%287 = comb.mux bin %282, %c-1_i2, %286 : i2 | |
%288 = comb.mux bin %281, %287, %c0_i2 : i2 | |
%289 = comb.concat %281, %288 : i1, i2 | |
%290 = comb.mux bin %279, %289, %c0_i3 : i3 | |
%291 = comb.concat %279, %290 : i1, i3 | |
%292 = comb.mux bin %241, %277, %291 : i4 | |
%293 = comb.concat %241, %292 : i1, i4 | |
%294 = comb.mux bin %163, %239, %293 : i5 | |
%295 = comb.concat %163, %294 : i1, i5 | |
%296 = comb.xor bin %295, %c-1_i6 : i6 | |
%297 = comb.concat %c0_i63, %157 : i63, i52 | |
%298 = comb.concat %c0_i109, %296 : i109, i6 | |
%299 = comb.shl bin %297, %298 : i115 | |
%300 = comb.extract %299 from 0 : (i115) -> i51 | |
%301 = comb.concat %300, %false : i51, i1 | |
%302 = comb.concat %c-1_i6, %163, %294 : i6, i1, i5 | |
%303 = comb.concat %false, %156 : i1, i11 | |
%304 = comb.mux bin %158, %302, %303 : i12 | |
%305 = comb.mux bin %158, %c-2_i2, %c1_i2 : i2 | |
%306 = comb.concat %c256_i10, %305 : i10, i2 | |
%307 = comb.add %304, %306 : i12 | |
%308 = comb.extract %307 from 10 : (i12) -> i2 | |
%309 = comb.icmp bin eq %308, %c-1_i2 : i2 | |
%310 = comb.and bin %309, %159 : i1 | |
%311 = comb.replicate %161 : (i1) -> i3 | |
%312 = comb.xor %311, %c-1_i3 : i3 | |
%313 = comb.concat %310, %c0_i9 : i1, i9 | |
%314 = comb.extract %312 from 1 : (i3) -> i2 | |
%315 = comb.and bin %308, %314 : i2 | |
%316 = comb.extract %307 from 0 : (i12) -> i10 | |
%317 = comb.extract %312 from 0 : (i3) -> i1 | |
%318 = comb.concat %317, %c-1_i9 : i1, i9 | |
%319 = comb.and bin %316, %318 : i10 | |
%320 = comb.or bin %319, %313 : i10 | |
%321 = comb.mux bin %158, %301, %157 : i52 | |
%322 = comb.concat %155, %315, %320, %321 : i1, i2, i10, i52 | |
%323 = comb.concat %c1879179264_i32, %62, %148, %153, %154 : i32, i1, i2, i7, i23 | |
%324 = comb.mux bin %load_wb_single, %323, %322 {sv.namehint = "load_wb_data_recoded"} : i65 | |
%regfile = seq.firmem 0, 1, undefined, port_order {prefix = ""} : <32 x 65> | |
seq.firmem.write_port %regfile[%438] = %448, clock %clock enable %455 : <32 x 65> | |
seq.firmem.write_port %regfile[%load_wb_tag] = %324, clock %clock enable %load_wb : <32 x 65> | |
%325 = seq.firmem.read_port %regfile[%ex_ra1], clock %clock : <32 x 65> | |
%326 = seq.firmem.read_port %regfile[%ex_ra2], clock %clock : <32 x 65> | |
%327 = seq.firmem.read_port %regfile[%ex_ra3], clock %clock : <32 x 65> | |
%ex_ra1 = seq.firreg %337 clock %clock {firrtl.random_init_start = 200 : ui64} : i5 | |
%ex_ra2 = seq.firreg %343 clock %clock {firrtl.random_init_start = 205 : ui64} : i5 | |
%ex_ra3 = seq.firreg %346 clock %clock {firrtl.random_init_start = 210 : ui64} : i5 | |
%328 = comb.xor bin %fp_decoder.io_sigs_swap12, %true : i1 | |
%329 = comb.extract %io_inst from 15 : (i32) -> i5 | |
%330 = comb.and bin %fp_decoder.io_sigs_ren1, %328 : i1 | |
%331 = comb.mux bin %330, %329, %ex_ra1 : i5 | |
%332 = comb.and bin %fp_decoder.io_sigs_ren1, %fp_decoder.io_sigs_swap12 : i1 | |
%333 = comb.mux bin %332, %329, %ex_ra2 : i5 | |
%334 = comb.extract %io_inst from 20 : (i32) -> i5 | |
%335 = comb.and bin %fp_decoder.io_sigs_ren2, %fp_decoder.io_sigs_swap12 : i1 | |
%336 = comb.mux bin %335, %334, %331 : i5 | |
%337 = comb.mux bin %io_valid, %336, %ex_ra1 : i5 | |
%338 = comb.and bin %fp_decoder.io_sigs_ren2, %fp_decoder.io_sigs_swap23 : i1 | |
%339 = comb.mux bin %338, %334, %ex_ra3 : i5 | |
%340 = comb.xor bin %fp_decoder.io_sigs_swap23, %true : i1 | |
%341 = comb.and bin %fp_decoder.io_sigs_ren2, %328, %340 : i1 | |
%342 = comb.mux bin %341, %334, %333 : i5 | |
%343 = comb.mux bin %io_valid, %342, %ex_ra2 : i5 | |
%344 = comb.extract %io_inst from 27 : (i32) -> i5 | |
%345 = comb.mux bin %fp_decoder.io_sigs_ren3, %344, %339 : i5 | |
%346 = comb.mux bin %io_valid, %345, %ex_ra3 : i5 | |
%347 = comb.extract %ex_reg_inst from 12 : (i32) -> i3 | |
%348 = comb.icmp bin eq %347, %c-1_i3 : i3 | |
%349 = comb.mux bin %348, %io_fcsr_rm, %347 {sv.namehint = "ex_rm"} : i3 | |
%350 = comb.extract %ex_reg_inst from 20 : (i32) -> i2 | |
%351 = comb.mux bin %2, %io_cp_req_bits_cmd, %13 {sv.namehint = "req_cmd"} : i5 | |
%352 = comb.mux bin %2, %io_cp_req_bits_ldst, %14 {sv.namehint = "req_ldst"} : i1 | |
%353 = comb.mux bin %2, %io_cp_req_bits_ren3, %15 {sv.namehint = "req_ren3"} : i1 | |
%354 = comb.mux bin %2, %io_cp_req_bits_swap23, %16 {sv.namehint = "req_swap23"} : i1 | |
%355 = comb.mux bin %2, %io_cp_req_bits_single, %17 {sv.namehint = "req_single"} : i1 | |
%356 = comb.mux bin %2, %io_cp_req_bits_rm, %349 {sv.namehint = "req_rm"} : i3 | |
%357 = comb.mux bin %2, %io_cp_req_bits_typ, %350 {sv.namehint = "req_typ"} : i2 | |
%358 = comb.mux bin %2, %io_cp_req_bits_in1, %325 {sv.namehint = "req_in1"} : i65 | |
%359 = comb.mux bin %io_cp_req_bits_swap23, %io_cp_req_bits_in3, %io_cp_req_bits_in2 : i65 | |
%360 = comb.mux bin %2, %359, %326 {sv.namehint = "req_in2"} : i65 | |
%361 = comb.mux bin %io_cp_req_bits_swap23, %io_cp_req_bits_in2, %io_cp_req_bits_in3 : i65 | |
%362 = comb.mux bin %2, %361, %327 {sv.namehint = "req_in3"} : i65 | |
%sfma.io_out_bits_data, %sfma.io_out_bits_exc = hw.instance "sfma" @FPUFMAPipe(clock: %clock: !seq.clock, reset: %reset: i1, io_in_valid: %364: i1, io_in_bits_cmd: %351: i5, io_in_bits_ren3: %353: i1, io_in_bits_swap23: %354: i1, io_in_bits_rm: %356: i3, io_in_bits_in1: %358: i65, io_in_bits_in2: %360: i65, io_in_bits_in3: %362: i65) -> (io_out_bits_data: i65, io_out_bits_exc: i5) {sv.namehint = "sfma.io_out_bits_exc"} | |
%363 = comb.and bin %0, %44 : i1 | |
%364 = comb.and bin %363, %40 {sv.namehint = "sfma.io_in_valid"} : i1 | |
%fpiu.io_as_double_rm, %fpiu.io_as_double_in1, %fpiu.io_as_double_in2, %fpiu.io_out_valid, %fpiu.io_out_bits_lt, %fpiu.io_out_bits_store, %fpiu.io_out_bits_toint, %fpiu.io_out_bits_exc = hw.instance "fpiu" @FPToInt(clock: %clock: !seq.clock, io_in_valid: %370: i1, io_in_bits_cmd: %351: i5, io_in_bits_ldst: %352: i1, io_in_bits_single: %355: i1, io_in_bits_rm: %356: i3, io_in_bits_typ: %357: i2, io_in_bits_in1: %358: i65, io_in_bits_in2: %360: i65) -> (io_as_double_rm: i3, io_as_double_in1: i65, io_as_double_in2: i65, io_out_valid: i1, io_out_bits_lt: i1, io_out_bits_store: i64, io_out_bits_toint: i64, io_out_bits_exc: i5) {sv.namehint = "fpmu.io_lt"} | |
%365 = comb.extract %39 from 2 : (i4) -> i2 | |
%366 = comb.extract %39 from 0 : (i4) -> i1 | |
%367 = comb.concat %365, %366 : i2, i1 | |
%368 = comb.icmp bin eq %367, %c3_i3 : i3 | |
%369 = comb.or bin %42, %45, %46, %368 : i1 | |
%370 = comb.and bin %0, %369 {sv.namehint = "fpiu.io_in_valid"} : i1 | |
%371 = comb.and bin %fpiu.io_out_valid, %mem_cp_valid, %mem_ctrl_toint : i1 | |
%372 = comb.concat %false, %fpiu.io_out_bits_toint : i1, i64 | |
%373 = comb.mux bin %371, %372, %c0_i65 : i65 | |
%ifpu.io_out_bits_data, %ifpu.io_out_bits_exc = hw.instance "ifpu" @IntToFP(clock: %clock: !seq.clock, reset: %reset: i1, io_in_valid: %374: i1, io_in_bits_cmd: %351: i5, io_in_bits_single: %355: i1, io_in_bits_rm: %356: i3, io_in_bits_typ: %357: i2, io_in_bits_in1: %376: i65) -> (io_out_bits_data: i65, io_out_bits_exc: i5) {sv.namehint = "ifpu.io_out_bits_exc"} | |
%374 = comb.and bin %0, %41 {sv.namehint = "ifpu.io_in_valid"} : i1 | |
%375 = comb.concat %false, %io_fromint_data : i1, i64 | |
%376 = comb.mux bin %2, %io_cp_req_bits_in1, %375 {sv.namehint = "ifpu.io_in_bits_in1"} : i65 | |
%fpmu.io_out_bits_data, %fpmu.io_out_bits_exc = hw.instance "fpmu" @FPToFP(clock: %clock: !seq.clock, reset: %reset: i1, io_in_valid: %377: i1, io_in_bits_cmd: %351: i5, io_in_bits_single: %355: i1, io_in_bits_rm: %356: i3, io_in_bits_in1: %358: i65, io_in_bits_in2: %360: i65, io_lt: %fpiu.io_out_bits_lt: i1) -> (io_out_bits_data: i65, io_out_bits_exc: i5) {sv.namehint = "fpmu.io_out_bits_exc"} | |
%377 = comb.and bin %0, %43 {sv.namehint = "fpmu.io_in_valid"} : i1 | |
%divSqrt_wen = seq.firreg %510 clock %clock {firrtl.random_init_start = 215 : ui64} : i1 | |
%divSqrt_waddr = seq.firreg %507 clock %clock {firrtl.random_init_start = 216 : ui64} : i5 | |
%divSqrt_single = seq.firreg %506 clock %clock {firrtl.random_init_start = 221 : ui64} : i1 | |
%divSqrt_in_flight = seq.firreg %513 clock %clock reset sync %reset, %false {firrtl.random_init_start = 222 : ui64} : i1 | |
%divSqrt_killed = seq.firreg %505 clock %clock {firrtl.random_init_start = 223 : ui64} : i1 | |
%FPUFMAPipe.io_out_bits_data, %FPUFMAPipe.io_out_bits_exc = hw.instance "FPUFMAPipe" @FPUFMAPipe_1(clock: %clock: !seq.clock, reset: %reset: i1, io_in_valid: %379: i1, io_in_bits_cmd: %351: i5, io_in_bits_ren3: %353: i1, io_in_bits_swap23: %354: i1, io_in_bits_rm: %356: i3, io_in_bits_in1: %358: i65, io_in_bits_in2: %360: i65, io_in_bits_in3: %362: i65) -> (io_out_bits_data: i65, io_out_bits_exc: i5) {sv.namehint = "FPUFMAPipe.io_out_bits_exc"} | |
%378 = comb.xor bin %40, %true : i1 | |
%379 = comb.and bin %363, %378 {sv.namehint = "FPUFMAPipe.io_in_valid"} : i1 | |
%380 = comb.and bin %mem_ctrl_fma, %mem_ctrl_single : i1 | |
%381 = comb.xor bin %mem_ctrl_single, %true : i1 | |
%382 = comb.and bin %mem_ctrl_fma, %381 : i1 | |
%383 = comb.or bin %mem_ctrl_fastpipe, %mem_ctrl_fromint : i1 | |
%wen = seq.firreg %417 clock %clock reset sync %reset, %c0_i3 {firrtl.random_init_start = 224 : ui64} : i3 | |
%wbInfo_0_rd = seq.firreg %427 clock %clock {firrtl.random_init_start = 227 : ui64} : i5 | |
%wbInfo_0_single = seq.firreg %421 clock %clock {firrtl.random_init_start = 232 : ui64} : i1 | |
%wbInfo_0_cp = seq.firreg %420 clock %clock {firrtl.random_init_start = 233 : ui64} : i1 | |
%wbInfo_0_pipeid = seq.firreg %425 clock %clock {firrtl.random_init_start = 234 : ui64} : i2 | |
%wbInfo_1_rd = seq.firreg %432 clock %clock {firrtl.random_init_start = 236 : ui64} : i5 | |
%wbInfo_1_single = seq.firreg %430 clock %clock {firrtl.random_init_start = 241 : ui64} : i1 | |
%wbInfo_1_cp = seq.firreg %429 clock %clock {firrtl.random_init_start = 242 : ui64} : i1 | |
%wbInfo_1_pipeid = seq.firreg %431 clock %clock {firrtl.random_init_start = 243 : ui64} : i2 | |
%wbInfo_2_rd = seq.firreg %437 clock %clock {firrtl.random_init_start = 245 : ui64} : i5 | |
%wbInfo_2_single = seq.firreg %435 clock %clock {firrtl.random_init_start = 250 : ui64} : i1 | |
%wbInfo_2_cp = seq.firreg %434 clock %clock {firrtl.random_init_start = 251 : ui64} : i1 | |
%wbInfo_2_pipeid = seq.firreg %436 clock %clock {firrtl.random_init_start = 252 : ui64} : i2 | |
%384 = comb.or bin %mem_ctrl_fma, %mem_ctrl_fastpipe, %mem_ctrl_fromint : i1 | |
%385 = comb.and bin %mem_reg_valid, %384 {sv.namehint = "mem_wen"} : i1 | |
%386 = comb.and bin %44, %40 : i1 | |
%387 = comb.or %43, %41 : i1 | |
%388 = comb.concat %386, %387 : i1, i1 | |
%389 = comb.concat %382, %380 : i1, i1 | |
%390 = comb.and %388, %389 : i2 | |
%391 = comb.icmp bin ne %390, %c0_i2 : i2 | |
%392 = comb.and bin %385, %391 : i1 | |
%393 = comb.or %43, %41 : i1 | |
%394 = comb.extract %wen from 2 : (i3) -> i1 | |
%395 = comb.and %393, %394 : i1 | |
%396 = comb.concat %392, %395 : i1, i1 | |
%397 = comb.icmp bin ne %396, %c0_i2 : i2 | |
%write_port_busy = seq.firreg %398 clock %clock {firrtl.random_init_start = 254 : ui64} : i1 | |
%398 = comb.mux bin %0, %397, %write_port_busy : i1 | |
%399 = comb.extract %wen from 1 : (i3) -> i1 | |
%400 = comb.mux bin %399, %wbInfo_1_rd, %wbInfo_0_rd : i5 | |
%401 = comb.mux bin %399, %wbInfo_1_single, %wbInfo_0_single : i1 | |
%402 = comb.mux bin %399, %wbInfo_1_cp, %wbInfo_0_cp : i1 | |
%403 = comb.mux bin %399, %wbInfo_1_pipeid, %wbInfo_0_pipeid : i2 | |
%404 = comb.extract %wen from 2 : (i3) -> i1 | |
%405 = comb.mux bin %404, %wbInfo_2_rd, %wbInfo_1_rd : i5 | |
%406 = comb.mux bin %404, %wbInfo_2_single, %wbInfo_1_single : i1 | |
%407 = comb.mux bin %404, %wbInfo_2_cp, %wbInfo_1_cp : i1 | |
%408 = comb.mux bin %404, %wbInfo_2_pipeid, %wbInfo_1_pipeid : i2 | |
%409 = comb.extract %wen from 1 : (i3) -> i2 | |
%410 = comb.concat %false, %409 : i1, i2 | |
%411 = comb.extract %wen from 2 : (i3) -> i1 | |
%412 = comb.or %411, %380 : i1 | |
%413 = comb.extract %wen from 1 : (i3) -> i1 | |
%414 = comb.or %413, %383 : i1 | |
%415 = comb.concat %382, %412, %414 : i1, i1, i1 | |
%416 = comb.and bin %385, %10 : i1 | |
%417 = comb.mux bin %416, %415, %410 : i3 | |
%418 = comb.xor bin %write_port_busy, %true : i1 | |
%419 = comb.and bin %385, %418, %383 : i1 | |
%420 = comb.mux bin %419, %mem_cp_valid, %402 : i1 | |
%421 = comb.mux bin %419, %mem_ctrl_single, %401 : i1 | |
%422 = comb.replicate %382 : (i1) -> i2 | |
%423 = comb.concat %380, %mem_ctrl_fromint : i1, i1 | |
%424 = comb.or bin %423, %422 : i2 | |
%425 = comb.mux bin %419, %424, %403 : i2 | |
%426 = comb.extract %mem_reg_inst from 7 : (i32) -> i5 | |
%427 = comb.mux bin %419, %426, %400 : i5 | |
%428 = comb.and bin %385, %418, %380 : i1 | |
%429 = comb.mux bin %428, %mem_cp_valid, %407 : i1 | |
%430 = comb.mux bin %428, %mem_ctrl_single, %406 : i1 | |
%431 = comb.mux bin %428, %424, %408 : i2 | |
%432 = comb.mux bin %428, %426, %405 : i5 | |
%433 = comb.and bin %385, %418, %382 : i1 | |
%434 = comb.mux bin %433, %mem_cp_valid, %wbInfo_2_cp : i1 | |
%435 = comb.mux bin %433, %mem_ctrl_single, %wbInfo_2_single : i1 | |
%436 = comb.mux bin %433, %424, %wbInfo_2_pipeid : i2 | |
%437 = comb.mux bin %433, %426, %wbInfo_2_rd : i5 | |
%438 = comb.mux bin %divSqrt_wen, %divSqrt_waddr, %wbInfo_0_rd {sv.namehint = "waddr"} : i5 | |
%439 = comb.extract %wbInfo_0_pipeid from 0 : (i2) -> i1 | |
%440 = comb.extract %wbInfo_0_pipeid from 1 : (i2) -> i1 | |
%441 = comb.mux bin %439, %FPUFMAPipe.io_out_bits_data, %sfma.io_out_bits_data : i65 | |
%442 = comb.mux bin %439, %ifpu.io_out_bits_data, %fpmu.io_out_bits_data : i65 | |
%443 = comb.mux bin %440, %441, %442 : i65 | |
%444 = comb.mux bin %divSqrt_wen, %516, %443 {sv.namehint = "wdata0"} : i65 | |
%445 = comb.mux bin %divSqrt_wen, %divSqrt_single, %wbInfo_0_single {sv.namehint = "wsingle"} : i1 | |
%446 = comb.extract %444 from 0 : (i65) -> i33 | |
%447 = comb.concat %c1879179264_i32, %446 : i32, i33 | |
%448 = comb.mux bin %445, %447, %444 {sv.namehint = "wdata"} : i65 | |
%449 = comb.mux bin %439, %FPUFMAPipe.io_out_bits_exc, %sfma.io_out_bits_exc : i5 | |
%450 = comb.mux bin %439, %ifpu.io_out_bits_exc, %fpmu.io_out_bits_exc : i5 | |
%451 = comb.mux bin %440, %449, %450 {sv.namehint = "wexc"} : i5 | |
%452 = comb.xor bin %wbInfo_0_cp, %true : i1 | |
%453 = comb.extract %wen from 0 : (i3) -> i1 | |
%454 = comb.and bin %452, %453 : i1 | |
%455 = comb.or bin %454, %divSqrt_wen : i1 | |
%456 = comb.and bin %wbInfo_0_cp, %453 : i1 | |
%457 = comb.mux bin %456, %448, %373 {sv.namehint = "io_cp_resp_bits_data"} : i65 | |
%458 = comb.or %456, %371 {sv.namehint = "io_cp_resp_valid"} : i1 | |
%459 = comb.xor bin %ex_reg_valid, %true {sv.namehint = "io_cp_req_ready"} : i1 | |
%460 = comb.and bin %wb_reg_valid, %wb_ctrl_toint {sv.namehint = "wb_toint_valid"} : i1 | |
%wb_toint_exc = seq.firreg %461 clock %clock {firrtl.random_init_start = 255 : ui64} : i5 | |
%461 = comb.mux bin %mem_ctrl_toint, %fpiu.io_out_bits_exc, %wb_toint_exc : i5 | |
%462 = comb.or bin %460, %divSqrt_wen, %453 {sv.namehint = "io_fcsr_flags_valid"} : i1 | |
%463 = comb.mux bin %460, %wb_toint_exc, %c0_i5 : i5 | |
%464 = comb.mux bin %divSqrt_wen, %518, %c0_i5 : i5 | |
%465 = comb.mux bin %453, %451, %c0_i5 : i5 | |
%466 = comb.or bin %463, %464, %465 {sv.namehint = "io_fcsr_flags_bits"} : i5 | |
%467 = comb.or bin %mem_ctrl_div, %mem_ctrl_sqrt : i1 | |
%468 = comb.and bin %mem_reg_valid, %467 : i1 | |
%469 = comb.xor bin %498, %true : i1 | |
%470 = comb.concat %469, %wen : i1, i3 | |
%471 = comb.icmp bin ne %470, %c0_i4 : i4 | |
%472 = comb.and bin %468, %471 {sv.namehint = "units_busy"} : i1 | |
%473 = comb.and bin %ex_reg_valid, %47 : i1 | |
%474 = comb.and bin %mem_reg_valid, %mem_ctrl_wflags : i1 | |
%475 = comb.or bin %473, %474, %460 : i1 | |
%476 = comb.concat %475, %wen : i1, i3 | |
%477 = comb.icmp bin ne %476, %c0_i4 : i4 | |
%478 = comb.or bin %477, %divSqrt_in_flight : i1 | |
%479 = comb.xor bin %478, %true {sv.namehint = "io_fcsr_rdy"} : i1 | |
%480 = comb.or bin %472, %write_port_busy, %divSqrt_in_flight {sv.namehint = "io_nack_mem"} : i1 | |
%481 = comb.xor bin %wb_cp_valid, %true : i1 | |
%482 = comb.or bin %382, %mem_ctrl_div, %mem_ctrl_sqrt : i1 | |
%483 = seq.firreg %482 clock %clock {firrtl.random_init_start = 260 : ui64} : i1 | |
%484 = comb.and bin %wb_reg_valid, %481, %483 {sv.namehint = "io_sboard_set"} : i1 | |
%485 = comb.icmp bin eq %wbInfo_0_pipeid, %c-1_i2 : i2 | |
%486 = comb.and bin %453, %485 : i1 | |
%487 = comb.or bin %divSqrt_wen, %486 : i1 | |
%488 = comb.and bin %481, %487 {sv.namehint = "io_sboard_clr"} : i1 | |
%489 = comb.extract %io_inst from 14 : (i32) -> i1 | |
%490 = comb.extract %io_inst from 12 : (i32) -> i2 | |
%491 = comb.icmp bin ne %490, %c-1_i2 : i2 | |
%492 = comb.extract %io_fcsr_rm from 2 : (i3) -> i1 | |
%493 = comb.or bin %491, %492 : i1 | |
%494 = comb.and bin %489, %493 {sv.namehint = "io_illegal_rm"} : i1 | |
%495 = seq.firreg %508 clock %clock {firrtl.random_init_start = 261 : ui64, sv.namehint = "RecFNToRecFN.io_roundingMode"} : i2 | |
%496 = seq.firreg %514 clock %clock {firrtl.random_init_start = 263 : ui64} : i5 | |
%497 = seq.firreg %511 clock %clock {firrtl.random_init_start = 268 : ui64, sv.namehint = "RecFNToRecFN.io_in"} : i65 | |
%DivSqrtRecF64.io_inReady_div, %DivSqrtRecF64.io_inReady_sqrt, %DivSqrtRecF64.io_outValid_div, %DivSqrtRecF64.io_outValid_sqrt, %DivSqrtRecF64.io_out, %DivSqrtRecF64.io_exceptionFlags = hw.instance "DivSqrtRecF64" @DivSqrtRecF64(clock: %clock: !seq.clock, reset: %reset: i1, io_inValid: %501: i1, io_sqrtOp: %mem_ctrl_sqrt: i1, io_a: %fpiu.io_as_double_in1: i65, io_b: %fpiu.io_as_double_in2: i65, io_roundingMode: %502: i2) -> (io_inReady_div: i1, io_inReady_sqrt: i1, io_outValid_div: i1, io_outValid_sqrt: i1, io_out: i65, io_exceptionFlags: i5) {sv.namehint = "DivSqrtRecF64.io_out"} | |
%498 = comb.mux bin %mem_ctrl_sqrt, %DivSqrtRecF64.io_inReady_sqrt, %DivSqrtRecF64.io_inReady_div {sv.namehint = "divSqrt_inReady"} : i1 | |
%499 = comb.or bin %DivSqrtRecF64.io_outValid_div, %DivSqrtRecF64.io_outValid_sqrt : i1 | |
%500 = comb.xor bin %divSqrt_in_flight, %true : i1 | |
%501 = comb.and bin %468, %500 {sv.namehint = "DivSqrtRecF64.io_inValid"} : i1 | |
%502 = comb.extract %fpiu.io_as_double_rm from 0 {sv.namehint = "DivSqrtRecF64.io_roundingMode"} : (i3) -> i2 | |
%503 = comb.and bin %501, %498 : i1 | |
%504 = comb.or %503, %divSqrt_in_flight : i1 | |
%505 = comb.mux bin %503, %9, %divSqrt_killed : i1 | |
%506 = comb.mux bin %503, %mem_ctrl_single, %divSqrt_single : i1 | |
%507 = comb.mux bin %503, %426, %divSqrt_waddr : i5 | |
%508 = comb.mux bin %503, %502, %495 : i2 | |
%509 = comb.xor bin %divSqrt_killed, %true : i1 | |
%510 = comb.and %499, %509 : i1 | |
%511 = comb.mux bin %499, %DivSqrtRecF64.io_out, %497 : i65 | |
%512 = comb.xor %499, %true : i1 | |
%513 = comb.and %512, %504 : i1 | |
%514 = comb.mux bin %499, %DivSqrtRecF64.io_exceptionFlags, %496 : i5 | |
%RecFNToRecFN.io_out, %RecFNToRecFN.io_exceptionFlags = hw.instance "RecFNToRecFN" @RecFNToRecFN(io_in: %497: i65, io_roundingMode: %495: i2) -> (io_out: i33, io_exceptionFlags: i5) {sv.namehint = "RecFNToRecFN.io_out"} | |
%515 = comb.concat %c0_i32, %RecFNToRecFN.io_out : i32, i33 | |
%516 = comb.mux bin %divSqrt_single, %515, %497 {sv.namehint = "divSqrt_wdata"} : i65 | |
%517 = comb.mux bin %divSqrt_single, %RecFNToRecFN.io_exceptionFlags, %c0_i5 : i5 | |
%518 = comb.or bin %496, %517 {sv.namehint = "divSqrt_flags"} : i5 | |
hw.output %462, %466, %fpiu.io_out_bits_store, %fpiu.io_out_bits_toint, %479, %480, %494, %fp_decoder.io_sigs_cmd, %fp_decoder.io_sigs_ldst, %fp_decoder.io_sigs_wen, %fp_decoder.io_sigs_ren1, %fp_decoder.io_sigs_ren2, %fp_decoder.io_sigs_ren3, %fp_decoder.io_sigs_swap12, %fp_decoder.io_sigs_swap23, %fp_decoder.io_sigs_single, %fp_decoder.io_sigs_fromint, %fp_decoder.io_sigs_toint, %fp_decoder.io_sigs_fastpipe, %fp_decoder.io_sigs_fma, %fp_decoder.io_sigs_div, %fp_decoder.io_sigs_sqrt, %fp_decoder.io_sigs_wflags, %484, %488, %438, %459, %458, %457, %c0_i5 : i1, i5, i64, i64, i1, i1, i1, i5, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i5, i1, i1, i65, i5 | |
} | |
hw.module private @FPUDecoder(in %io_inst : i32, out io_sigs_cmd : i5, out io_sigs_ldst : i1, out io_sigs_wen : i1, out io_sigs_ren1 : i1, out io_sigs_ren2 : i1, out io_sigs_ren3 : i1, out io_sigs_swap12 : i1, out io_sigs_swap23 : i1, out io_sigs_single : i1, out io_sigs_fromint : i1, out io_sigs_toint : i1, out io_sigs_fastpipe : i1, out io_sigs_fma : i1, out io_sigs_div : i1, out io_sigs_sqrt : i1, out io_sigs_wflags : i1) { | |
%c-4_i3 = hw.constant -4 : i3 | |
%c7_i4 = hw.constant 7 : i4 | |
%c0_i4 = hw.constant 0 : i4 | |
%c5_i4 = hw.constant 5 : i4 | |
%c3_i3 = hw.constant 3 : i3 | |
%c-3_i3 = hw.constant -3 : i3 | |
%c1_i2 = hw.constant 1 : i2 | |
%c1_i3 = hw.constant 1 : i3 | |
%c-1_i3 = hw.constant -1 : i3 | |
%c-2_i2 = hw.constant -2 : i2 | |
%c0_i2 = hw.constant 0 : i2 | |
%c-1_i2 = hw.constant -1 : i2 | |
%true = hw.constant true | |
%0 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%1 = comb.extract %io_inst from 27 : (i32) -> i1 | |
%2 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%3 = comb.concat %1, %2 : i1, i1 | |
%4 = comb.icmp bin eq %3, %c-1_i2 : i2 | |
%5 = comb.or bin %0, %4 : i1 | |
%6 = comb.extract %io_inst from 3 : (i32) -> i1 | |
%7 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%8 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%9 = comb.concat %7, %8 : i1, i1 | |
%10 = comb.icmp bin eq %9, %c-1_i2 : i2 | |
%11 = comb.or bin %6, %10 : i1 | |
%12 = comb.extract %io_inst from 6 : (i32) -> i1 | |
%13 = comb.xor bin %12, %true {sv.namehint = "decoder_1"} : i1 | |
%14 = comb.extract %io_inst from 29 : (i32) -> i1 | |
%15 = comb.or bin %13, %14 : i1 | |
%16 = comb.extract %io_inst from 30 : (i32) -> i1 | |
%17 = comb.or bin %13, %16 : i1 | |
%18 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%19 = comb.xor bin %18, %true : i1 | |
%20 = comb.concat %19, %17, %15, %11, %5 {sv.namehint = "decoder_0"} : i1, i1, i1, i1, i1 | |
%21 = comb.extract %io_inst from 31 : (i32) -> i1 | |
%22 = comb.extract %io_inst from 5 : (i32) -> i1 | |
%23 = comb.concat %21, %22 : i1, i1 | |
%24 = comb.icmp bin eq %23, %c0_i2 : i2 | |
%25 = comb.extract %io_inst from 4 : (i32) -> i2 | |
%26 = comb.icmp bin eq %25, %c0_i2 : i2 | |
%27 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%28 = comb.extract %io_inst from 5 : (i32) -> i1 | |
%29 = comb.concat %27, %28 : i1, i1 | |
%30 = comb.icmp bin eq %29, %c-2_i2 : i2 | |
%31 = comb.or bin %24, %26, %30 {sv.namehint = "decoder_2"} : i1 | |
%32 = comb.extract %io_inst from 31 : (i32) -> i1 | |
%33 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%34 = comb.concat %32, %33 : i1, i1 | |
%35 = comb.icmp bin eq %34, %c0_i2 : i2 | |
%36 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%37 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%38 = comb.concat %36, %37 : i1, i1 | |
%39 = comb.icmp bin eq %38, %c0_i2 : i2 | |
%40 = comb.extract %io_inst from 6 : (i32) -> i1 | |
%41 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%42 = comb.concat %40, %41 : i1, i1 | |
%43 = comb.icmp bin eq %42, %c-2_i2 {sv.namehint = "decoder_5"} : i2 | |
%44 = comb.or bin %35, %39, %43 {sv.namehint = "decoder_3"} : i1 | |
%45 = comb.extract %io_inst from 30 : (i32) -> i1 | |
%46 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%47 = comb.concat %45, %46 : i1, i1 | |
%48 = comb.icmp bin eq %47, %c0_i2 : i2 | |
%49 = comb.extract %io_inst from 5 : (i32) -> i1 | |
%50 = comb.or bin %48, %49, %43 {sv.namehint = "decoder_4"} : i1 | |
%51 = comb.extract %io_inst from 30 : (i32) -> i1 | |
%52 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%53 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%54 = comb.concat %51, %52, %53 : i1, i1, i1 | |
%55 = comb.icmp bin eq %54, %c-1_i3 : i3 | |
%56 = comb.or bin %13, %55 {sv.namehint = "decoder_6"} : i1 | |
%57 = comb.extract %io_inst from 28 : (i32) -> i2 | |
%58 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%59 = comb.concat %57, %58 : i2, i1 | |
%60 = comb.icmp bin eq %59, %c1_i3 {sv.namehint = "decoder_7"} : i3 | |
%61 = comb.extract %io_inst from 12 : (i32) -> i1 | |
%62 = comb.extract %io_inst from 6 : (i32) -> i1 | |
%63 = comb.concat %61, %62 : i1, i1 | |
%64 = comb.icmp bin eq %63, %c0_i2 : i2 | |
%65 = comb.extract %io_inst from 25 : (i32) -> i1 | |
%66 = comb.extract %io_inst from 6 : (i32) -> i1 | |
%67 = comb.concat %65, %66 : i1, i1 | |
%68 = comb.icmp bin eq %67, %c1_i2 : i2 | |
%69 = comb.or bin %64, %68 {sv.namehint = "decoder_8"} : i1 | |
%70 = comb.extract %io_inst from 31 : (i32) -> i1 | |
%71 = comb.extract %io_inst from 31 : (i32) -> i1 | |
%72 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%73 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%74 = comb.concat %71, %72, %73 : i1, i1, i1 | |
%75 = comb.icmp bin eq %74, %c-1_i3 {sv.namehint = "decoder_9"} : i3 | |
%76 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%77 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%78 = comb.concat %70, %76, %77 : i1, i1, i1 | |
%79 = comb.icmp bin eq %78, %c-3_i3 : i3 | |
%80 = comb.or bin %49, %79 {sv.namehint = "decoder_10"} : i1 | |
%81 = comb.extract %io_inst from 31 : (i32) -> i1 | |
%82 = comb.extract %io_inst from 29 : (i32) -> i1 | |
%83 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%84 = comb.concat %81, %82, %83 : i1, i1, i1 | |
%85 = comb.icmp bin eq %84, %c3_i3 : i3 | |
%86 = comb.extract %io_inst from 30 : (i32) -> i2 | |
%87 = comb.extract %io_inst from 30 : (i32) -> i2 | |
%88 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%89 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%90 = comb.concat %87, %88, %89 : i2, i1, i1 | |
%91 = comb.icmp bin eq %90, %c5_i4 : i4 | |
%92 = comb.or bin %85, %91 {sv.namehint = "decoder_11"} : i1 | |
%93 = comb.extract %io_inst from 28 : (i32) -> i3 | |
%94 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%95 = comb.concat %93, %94 : i3, i1 | |
%96 = comb.icmp bin eq %95, %c0_i4 : i4 | |
%97 = comb.extract %io_inst from 29 : (i32) -> i2 | |
%98 = comb.extract %io_inst from 27 : (i32) -> i1 | |
%99 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%100 = comb.concat %97, %98, %99 : i2, i1, i1 | |
%101 = comb.icmp bin eq %100, %c0_i4 : i4 | |
%102 = comb.or bin %96, %101, %43 {sv.namehint = "decoder_12"} : i1 | |
%103 = comb.extract %io_inst from 30 : (i32) -> i1 | |
%104 = comb.extract %io_inst from 27 : (i32) -> i2 | |
%105 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%106 = comb.concat %103, %104, %105 : i1, i2, i1 | |
%107 = comb.icmp bin eq %106, %c7_i4 {sv.namehint = "decoder_13"} : i4 | |
%108 = comb.extract %io_inst from 28 : (i32) -> i1 | |
%109 = comb.extract %io_inst from 4 : (i32) -> i1 | |
%110 = comb.concat %86, %108, %109 : i2, i1, i1 | |
%111 = comb.icmp bin eq %110, %c7_i4 {sv.namehint = "decoder_14"} : i4 | |
%112 = comb.extract %io_inst from 29 : (i32) -> i1 | |
%113 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%114 = comb.concat %112, %113 : i1, i1 | |
%115 = comb.icmp bin eq %114, %c0_i2 : i2 | |
%116 = comb.extract %io_inst from 27 : (i32) -> i1 | |
%117 = comb.extract %io_inst from 13 : (i32) -> i1 | |
%118 = comb.concat %116, %117 : i1, i1 | |
%119 = comb.icmp bin eq %118, %c-2_i2 : i2 | |
%120 = comb.extract %io_inst from 30 : (i32) -> i2 | |
%121 = comb.extract %io_inst from 2 : (i32) -> i1 | |
%122 = comb.concat %120, %121 : i2, i1 | |
%123 = comb.icmp bin eq %122, %c-4_i3 : i3 | |
%124 = comb.or bin %115, %43, %119, %123 {sv.namehint = "decoder_15"} : i1 | |
hw.output %20, %13, %31, %44, %50, %43, %56, %60, %69, %75, %80, %92, %102, %107, %111, %124 : i5, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
} | |
hw.module private @FPUFMAPipe(in %clock : !seq.clock, in %reset : i1, in %io_in_valid : i1, in %io_in_bits_cmd : i5, in %io_in_bits_ren3 : i1, in %io_in_bits_swap23 : i1, in %io_in_bits_rm : i3, in %io_in_bits_in1 : i65, in %io_in_bits_in2 : i65, in %io_in_bits_in3 : i65, out io_out_bits_data : i65, out io_out_bits_exc : i5) { | |
%c0_i3 = hw.constant 0 : i3 | |
%c0_i32 = hw.constant 0 : i32 | |
%false = hw.constant false | |
%c2147483648_i65 = hw.constant 2147483648 : i65 | |
%0 = comb.extract %io_in_bits_in1 from 32 : (i65) -> i1 | |
%1 = comb.extract %io_in_bits_in2 from 32 : (i65) -> i1 | |
%2 = comb.xor bin %0, %1 : i1 | |
%valid = seq.firreg %io_in_valid clock %clock {firrtl.random_init_start = 0 : ui64} : i1 | |
%in_cmd = seq.firreg %10 clock %clock {firrtl.random_init_start = 1 : ui64} : i5 | |
%in_rm = seq.firreg %3 clock %clock {firrtl.random_init_start = 21 : ui64} : i3 | |
%in_in1 = seq.firreg %4 clock %clock {firrtl.random_init_start = 26 : ui64} : i65 | |
%in_in2 = seq.firreg %12 clock %clock {firrtl.random_init_start = 91 : ui64} : i65 | |
%in_in3 = seq.firreg %15 clock %clock {firrtl.random_init_start = 156 : ui64} : i65 | |
%3 = comb.mux bin %io_in_valid, %io_in_bits_rm, %in_rm : i3 | |
%4 = comb.mux bin %io_in_valid, %io_in_bits_in1, %in_in1 : i65 | |
%5 = comb.extract %io_in_bits_cmd from 1 : (i5) -> i1 | |
%6 = comb.or bin %io_in_bits_ren3, %io_in_bits_swap23 : i1 | |
%7 = comb.and bin %5, %6 : i1 | |
%8 = comb.extract %io_in_bits_cmd from 0 : (i5) -> i1 | |
%9 = comb.concat %c0_i3, %7, %8 : i3, i1, i1 | |
%10 = comb.mux bin %io_in_valid, %9, %in_cmd : i5 | |
%11 = comb.mux bin %io_in_bits_swap23, %c2147483648_i65, %io_in_bits_in2 : i65 | |
%12 = comb.mux bin %io_in_valid, %11, %in_in2 : i65 | |
%13 = comb.concat %c0_i32, %2, %c0_i32 : i32, i1, i32 | |
%14 = comb.mux bin %6, %io_in_bits_in3, %13 : i65 | |
%15 = comb.mux bin %io_in_valid, %14, %in_in3 : i65 | |
%fma.io_out, %fma.io_exceptionFlags = hw.instance "fma" @MulAddRecFN(io_op: %16: i2, io_a: %18: i33, io_b: %19: i33, io_c: %20: i33, io_roundingMode: %17: i2) -> (io_out: i33, io_exceptionFlags: i5) {sv.namehint = "res_exc"} | |
%16 = comb.extract %in_cmd from 0 {sv.namehint = "fma.io_op"} : (i5) -> i2 | |
%17 = comb.extract %in_rm from 0 {sv.namehint = "fma.io_roundingMode"} : (i3) -> i2 | |
%18 = comb.extract %in_in1 from 0 {sv.namehint = "fma.io_a"} : (i65) -> i33 | |
%19 = comb.extract %in_in2 from 0 {sv.namehint = "fma.io_b"} : (i65) -> i33 | |
%20 = comb.extract %in_in3 from 0 {sv.namehint = "fma.io_c"} : (i65) -> i33 | |
%21 = comb.concat %c0_i32, %fma.io_out {sv.namehint = "res_data"} : i32, i33 | |
%22 = seq.firreg %valid clock %clock reset sync %reset, %false {firrtl.random_init_start = 221 : ui64} : i1 | |
%23 = seq.firreg %25 clock %clock {firrtl.random_init_start = 222 : ui64} : i65 | |
%24 = seq.firreg %26 clock %clock {firrtl.random_init_start = 287 : ui64} : i5 | |
%25 = comb.mux bin %valid, %21, %23 : i65 | |
%26 = comb.mux bin %valid, %fma.io_exceptionFlags, %24 : i5 | |
%27 = seq.firreg %29 clock %clock {firrtl.random_init_start = 293 : ui64, sv.namehint = "io_out_bits_data"} : i65 | |
%28 = seq.firreg %30 clock %clock {firrtl.random_init_start = 358 : ui64, sv.namehint = "io_out_bits_exc"} : i5 | |
%29 = comb.mux bin %22, %23, %27 : i65 | |
%30 = comb.mux bin %22, %24, %28 : i5 | |
hw.output %27, %28 : i65, i5 | |
} | |
hw.module private @FPToInt(in %clock : !seq.clock, in %io_in_valid : i1, in %io_in_bits_cmd : i5, in %io_in_bits_ldst : i1, in %io_in_bits_single : i1, in %io_in_bits_rm : i3, in %io_in_bits_typ : i2, in %io_in_bits_in1 : i65, in %io_in_bits_in2 : i65, out io_as_double_rm : i3, out io_as_double_in1 : i65, out io_as_double_in2 : i65, out io_out_valid : i1, out io_out_bits_lt : i1, out io_out_bits_store : i64, out io_out_bits_toint : i64, out io_out_bits_exc : i5) { | |
%c-1_i3 = hw.constant -1 : i3 | |
%c1023_i11 = hw.constant 1023 : i11 | |
%c2_i6 = hw.constant 2 : i6 | |
%c0_i9 = hw.constant 0 : i9 | |
%c127_i8 = hw.constant 127 : i8 | |
%c2_i5 = hw.constant 2 : i5 | |
%c0_i6 = hw.constant 0 : i6 | |
%c-3_i3 = hw.constant -3 : i3 | |
%c1792_i12 = hw.constant 1792 : i12 | |
%c0_i29 = hw.constant 0 : i29 | |
%c2_i10 = hw.constant 2 : i10 | |
%c1_i2 = hw.constant 1 : i2 | |
%c1_i3 = hw.constant 1 : i3 | |
%c2_i7 = hw.constant 2 : i7 | |
%c0_i63 = hw.constant 0 : i63 | |
%c0_i54 = hw.constant 0 : i54 | |
%c0_i47 = hw.constant 0 : i47 | |
%c0_i19 = hw.constant 0 : i19 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c0_i2 = hw.constant 0 : i2 | |
%c-2_i2 = hw.constant -2 : i2 | |
%true = hw.constant true | |
%c0_i3 = hw.constant 0 : i3 | |
%c0_i23 = hw.constant 0 : i23 | |
%c0_i52 = hw.constant 0 : i52 | |
%c0_i5 = hw.constant 0 : i5 | |
%in_cmd = seq.firreg %0 clock %clock {firrtl.random_init_start = 0 : ui64} : i5 | |
%in_single = seq.firreg %1 clock %clock {firrtl.random_init_start = 12 : ui64} : i1 | |
%in_rm = seq.firreg %2 clock %clock {firrtl.random_init_start = 20 : ui64, sv.namehint = "in_rm"} : i3 | |
%in_typ = seq.firreg %3 clock %clock {firrtl.random_init_start = 23 : ui64} : i2 | |
%in_in1 = seq.firreg %22 clock %clock {firrtl.random_init_start = 25 : ui64, sv.namehint = "in_in1"} : i65 | |
%in_in2 = seq.firreg %37 clock %clock {firrtl.random_init_start = 90 : ui64, sv.namehint = "in_in2"} : i65 | |
%valid = seq.firreg %io_in_valid clock %clock {firrtl.random_init_start = 220 : ui64, sv.namehint = "valid"} : i1 | |
%0 = comb.mux bin %io_in_valid, %io_in_bits_cmd, %in_cmd : i5 | |
%1 = comb.mux bin %io_in_valid, %io_in_bits_single, %in_single : i1 | |
%2 = comb.mux bin %io_in_valid, %io_in_bits_rm, %in_rm : i3 | |
%3 = comb.mux bin %io_in_valid, %io_in_bits_typ, %in_typ : i2 | |
%4 = comb.xor bin %io_in_bits_ldst, %true : i1 | |
%5 = comb.extract %io_in_bits_cmd from 2 : (i5) -> i2 | |
%6 = comb.icmp bin ne %5, %c-1_i2 : i2 | |
%7 = comb.and bin %io_in_bits_single, %4, %6 : i1 | |
%8 = comb.extract %io_in_bits_in1 from 32 : (i65) -> i1 | |
%9 = comb.extract %io_in_bits_in1 from 0 : (i65) -> i23 | |
%10 = comb.extract %io_in_bits_in1 from 23 : (i65) -> i9 | |
%11 = comb.extract %io_in_bits_in1 from 29 : (i65) -> i3 | |
%12 = comb.concat %c0_i3, %10 : i3, i9 | |
%13 = comb.add %12, %c1792_i12 : i12 | |
%14 = comb.icmp bin eq %11, %c0_i3 : i3 | |
%15 = comb.icmp bin ugt %11, %c-3_i3 : i3 | |
%16 = comb.or bin %14, %15 : i1 | |
%17 = comb.extract %13 from 0 : (i12) -> i9 | |
%18 = comb.concat %11, %17 : i3, i9 | |
%19 = comb.mux bin %16, %18, %13 : i12 | |
%20 = comb.concat %8, %19, %9, %c0_i29 : i1, i12, i23, i29 | |
%21 = comb.mux bin %7, %20, %io_in_bits_in1 : i65 | |
%22 = comb.mux bin %io_in_valid, %21, %in_in1 : i65 | |
%23 = comb.extract %io_in_bits_in2 from 32 : (i65) -> i1 | |
%24 = comb.extract %io_in_bits_in2 from 0 : (i65) -> i23 | |
%25 = comb.extract %io_in_bits_in2 from 23 : (i65) -> i9 | |
%26 = comb.extract %io_in_bits_in2 from 29 : (i65) -> i3 | |
%27 = comb.concat %c0_i3, %25 : i3, i9 | |
%28 = comb.add %27, %c1792_i12 : i12 | |
%29 = comb.icmp bin eq %26, %c0_i3 : i3 | |
%30 = comb.icmp bin ugt %26, %c-3_i3 : i3 | |
%31 = comb.or bin %29, %30 : i1 | |
%32 = comb.extract %28 from 0 : (i12) -> i9 | |
%33 = comb.concat %26, %32 : i3, i9 | |
%34 = comb.mux bin %31, %33, %28 : i12 | |
%35 = comb.concat %23, %34, %24, %c0_i29 : i1, i12, i23, i29 | |
%36 = comb.mux bin %7, %35, %io_in_bits_in2 : i65 | |
%37 = comb.mux bin %io_in_valid, %36, %in_in2 : i65 | |
%38 = comb.extract %in_in1 from 32 : (i65) -> i1 | |
%39 = comb.extract %in_in1 from 0 : (i65) -> i23 | |
%40 = comb.extract %in_in1 from 23 : (i65) -> i7 | |
%41 = comb.icmp bin ult %40, %c2_i7 : i7 | |
%42 = comb.extract %in_in1 from 29 : (i65) -> i3 | |
%43 = comb.icmp bin eq %42, %c1_i3 : i3 | |
%44 = comb.extract %in_in1 from 30 : (i65) -> i2 | |
%45 = comb.icmp bin eq %44, %c1_i2 : i2 | |
%46 = comb.and bin %45, %41 : i1 | |
%47 = comb.or bin %43, %46 : i1 | |
%48 = comb.extract %in_in1 from 24 : (i65) -> i6 | |
%49 = comb.icmp bin ne %48, %c0_i6 : i6 | |
%50 = comb.and bin %45, %49 : i1 | |
%51 = comb.icmp bin eq %44, %c-2_i2 : i2 | |
%52 = comb.or bin %50, %51 : i1 | |
%53 = comb.icmp bin eq %44, %c-1_i2 : i2 | |
%54 = comb.extract %in_in1 from 29 : (i65) -> i1 | |
%55 = comb.and bin %53, %54 : i1 | |
%56 = comb.extract %in_in1 from 23 : (i65) -> i5 | |
%57 = comb.sub %c2_i5, %56 : i5 | |
%58 = comb.concat %true, %39 : i1, i23 | |
%59 = comb.concat %c0_i19, %57 : i19, i5 | |
%60 = comb.shru bin %58, %59 : i24 | |
%61 = comb.extract %60 from 0 : (i24) -> i23 | |
%62 = comb.extract %in_in1 from 23 : (i65) -> i8 | |
%63 = comb.add %62, %c127_i8 : i8 | |
%64 = comb.replicate %53 : (i1) -> i8 | |
%65 = comb.mux bin %52, %63, %64 : i8 | |
%66 = comb.or bin %52, %55 : i1 | |
%67 = comb.mux bin %47, %61, %c0_i23 : i23 | |
%68 = comb.mux bin %66, %39, %67 : i23 | |
%69 = comb.replicate %38 : (i1) -> i33 | |
%70 = comb.concat %69, %65, %68 {sv.namehint = "unrec_s"} : i33, i8, i23 | |
%71 = comb.extract %in_in1 from 64 : (i65) -> i1 | |
%72 = comb.extract %in_in1 from 0 : (i65) -> i52 | |
%73 = comb.extract %in_in1 from 52 : (i65) -> i10 | |
%74 = comb.icmp bin ult %73, %c2_i10 : i10 | |
%75 = comb.extract %in_in1 from 61 : (i65) -> i3 | |
%76 = comb.icmp bin eq %75, %c1_i3 : i3 | |
%77 = comb.extract %in_in1 from 62 : (i65) -> i2 | |
%78 = comb.icmp bin eq %77, %c1_i2 : i2 | |
%79 = comb.and bin %78, %74 : i1 | |
%80 = comb.or bin %76, %79 : i1 | |
%81 = comb.extract %in_in1 from 53 : (i65) -> i9 | |
%82 = comb.icmp bin ne %81, %c0_i9 : i9 | |
%83 = comb.and bin %78, %82 : i1 | |
%84 = comb.icmp bin eq %77, %c-2_i2 : i2 | |
%85 = comb.or bin %83, %84 : i1 | |
%86 = comb.icmp bin eq %77, %c-1_i2 : i2 | |
%87 = comb.extract %in_in1 from 61 : (i65) -> i1 | |
%88 = comb.and bin %86, %87 : i1 | |
%89 = comb.extract %in_in1 from 52 : (i65) -> i6 | |
%90 = comb.sub %c2_i6, %89 : i6 | |
%91 = comb.concat %true, %72 : i1, i52 | |
%92 = comb.concat %c0_i47, %90 : i47, i6 | |
%93 = comb.shru bin %91, %92 : i53 | |
%94 = comb.extract %93 from 0 : (i53) -> i52 | |
%95 = comb.extract %in_in1 from 52 : (i65) -> i11 | |
%96 = comb.add %95, %c1023_i11 : i11 | |
%97 = comb.replicate %86 : (i1) -> i11 | |
%98 = comb.mux bin %85, %96, %97 : i11 | |
%99 = comb.or bin %85, %88 : i1 | |
%100 = comb.mux bin %80, %94, %c0_i52 : i52 | |
%101 = comb.mux bin %99, %72, %100 : i52 | |
%102 = comb.concat %71, %98, %101 : i1, i11, i52 | |
%103 = comb.mux bin %in_single, %70, %102 {sv.namehint = "unrec_int"} : i64 | |
%104 = comb.icmp bin eq %42, %c0_i3 : i3 | |
%105 = comb.xor bin %54, %true : i1 | |
%106 = comb.and bin %53, %105 : i1 | |
%107 = comb.icmp eq %42, %c-1_i3 : i3 | |
%108 = comb.extract %in_in1 from 22 : (i65) -> i1 | |
%109 = comb.xor bin %108, %true : i1 | |
%110 = comb.and bin %107, %109 : i1 | |
%111 = comb.and bin %107, %108 : i1 | |
%112 = comb.xor bin %38, %true : i1 | |
%113 = comb.and bin %106, %112 : i1 | |
%114 = comb.and bin %52, %112 : i1 | |
%115 = comb.and bin %47, %112 : i1 | |
%116 = comb.and bin %104, %112 : i1 | |
%117 = comb.and bin %104, %38 : i1 | |
%118 = comb.and bin %47, %38 : i1 | |
%119 = comb.and bin %52, %38 : i1 | |
%120 = comb.and bin %106, %38 : i1 | |
%121 = comb.concat %111, %110, %113, %114, %115, %116, %117, %118, %119, %120 {sv.namehint = "classify_s"} : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%122 = comb.icmp bin eq %75, %c0_i3 : i3 | |
%123 = comb.xor bin %87, %true : i1 | |
%124 = comb.and bin %86, %123 : i1 | |
%125 = comb.icmp eq %75, %c-1_i3 : i3 | |
%126 = comb.extract %in_in1 from 51 : (i65) -> i1 | |
%127 = comb.xor bin %126, %true : i1 | |
%128 = comb.and bin %125, %127 : i1 | |
%129 = comb.and bin %125, %126 : i1 | |
%130 = comb.xor bin %71, %true : i1 | |
%131 = comb.and bin %124, %130 : i1 | |
%132 = comb.and bin %85, %130 : i1 | |
%133 = comb.and bin %80, %130 : i1 | |
%134 = comb.and bin %122, %130 : i1 | |
%135 = comb.and bin %122, %71 : i1 | |
%136 = comb.and bin %80, %71 : i1 | |
%137 = comb.and bin %85, %71 : i1 | |
%138 = comb.and bin %124, %71 : i1 | |
%139 = comb.concat %129, %128, %131, %132, %133, %134, %135, %136, %137, %138 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%140 = comb.mux bin %in_single, %121, %139 {sv.namehint = "classify_out"} : i10 | |
%dcmp.io_lt, %dcmp.io_eq, %dcmp.io_exceptionFlags = hw.instance "dcmp" @CompareRecFN(io_a: %in_in1: i65, io_b: %in_in2: i65, io_signaling: %142: i1) -> (io_lt: i1, io_eq: i1, io_exceptionFlags: i5) {sv.namehint = "dcmp.io_eq"} | |
%141 = comb.extract %in_rm from 1 : (i3) -> i1 | |
%142 = comb.xor bin %141, %true {sv.namehint = "dcmp.io_signaling"} : i1 | |
%143 = comb.extract %in_rm from 0 : (i3) -> i1 | |
%144 = comb.concat %c0_i54, %140 : i54, i10 | |
%145 = comb.mux bin %143, %144, %103 : i64 | |
%146 = comb.extract %in_cmd from 2 : (i5) -> i2 | |
%147 = comb.icmp bin eq %146, %c1_i2 : i2 | |
%148 = comb.extract %in_rm from 0 : (i3) -> i2 | |
%149 = comb.xor %148, %c-1_i2 : i2 | |
%150 = comb.concat %dcmp.io_lt, %dcmp.io_eq : i1, i1 | |
%151 = comb.and bin %149, %150 : i2 | |
%152 = comb.icmp bin ne %151, %c0_i2 : i2 | |
%153 = comb.concat %c0_i63, %152 : i63, i1 | |
%154 = comb.mux bin %147, %153, %145 : i64 | |
%155 = comb.mux bin %147, %dcmp.io_exceptionFlags, %c0_i5 : i5 | |
%156 = comb.icmp bin eq %146, %c-2_i2 : i2 | |
%RecFNToIN.io_out, %RecFNToIN.io_intExceptionFlags = hw.instance "RecFNToIN" @RecFNToIN(io_in: %in_in1: i65, io_roundingMode: %157: i2, io_signedOut: %159: i1) -> (io_out: i32, io_intExceptionFlags: i3) {sv.namehint = "RecFNToIN.io_out"} | |
%157 = comb.extract %in_rm from 0 {sv.namehint = "RecFNToIN.io_roundingMode"} : (i3) -> i2 | |
%158 = comb.extract %in_typ from 0 : (i2) -> i1 | |
%159 = comb.xor bin %158, %true {sv.namehint = "RecFNToIN.io_signedOut"} : i1 | |
%160 = comb.extract %in_typ from 1 : (i2) -> i1 | |
%161 = comb.extract %RecFNToIN.io_out from 31 : (i32) -> i1 | |
%162 = comb.replicate %161 : (i1) -> i32 | |
%163 = comb.concat %162, %RecFNToIN.io_out : i32, i32 | |
%164 = comb.extract %RecFNToIN.io_intExceptionFlags from 1 : (i3) -> i2 | |
%165 = comb.icmp bin ne %164, %c0_i2 : i2 | |
%166 = comb.extract %RecFNToIN.io_intExceptionFlags from 0 : (i3) -> i1 | |
%167 = comb.concat %165, %c0_i3, %166 : i1, i3, i1 | |
%RecFNToIN_1.io_out, %RecFNToIN_1.io_intExceptionFlags = hw.instance "RecFNToIN_1" @RecFNToIN_1(io_in: %in_in1: i65, io_roundingMode: %157: i2, io_signedOut: %159: i1) -> (io_out: i64, io_intExceptionFlags: i3) {sv.namehint = "RecFNToIN_1.io_out"} | |
%168 = comb.mux bin %160, %RecFNToIN_1.io_out, %163 : i64 | |
%169 = comb.mux bin %156, %168, %154 {sv.namehint = "io_out_bits_toint"} : i64 | |
%170 = comb.extract %RecFNToIN_1.io_intExceptionFlags from 1 : (i3) -> i2 | |
%171 = comb.icmp bin ne %170, %c0_i2 : i2 | |
%172 = comb.extract %RecFNToIN_1.io_intExceptionFlags from 0 : (i3) -> i1 | |
%173 = comb.concat %171, %c0_i3, %172 : i1, i3, i1 | |
%174 = comb.mux bin %160, %173, %167 : i5 | |
%175 = comb.mux bin %156, %174, %155 {sv.namehint = "io_out_bits_exc"} : i5 | |
hw.output %in_rm, %in_in1, %in_in2, %valid, %dcmp.io_lt, %103, %169, %175 : i3, i65, i65, i1, i1, i64, i64, i5 | |
} | |
hw.module private @IntToFP(in %clock : !seq.clock, in %reset : i1, in %io_in_valid : i1, in %io_in_bits_cmd : i5, in %io_in_bits_single : i1, in %io_in_bits_rm : i3, in %io_in_bits_typ : i2, in %io_in_bits_in1 : i65, out io_out_bits_data : i65, out io_out_bits_exc : i5) { | |
%c-1_i9 = hw.constant -1 : i9 | |
%c256_i10 = hw.constant 256 : i10 | |
%c0_i2 = hw.constant 0 : i2 | |
%c-1_i3 = hw.constant -1 : i3 | |
%c32_i7 = hw.constant 32 : i7 | |
%c-1_i4 = hw.constant -1 : i4 | |
%c0_i3 = hw.constant 0 : i3 | |
%c0_i7 = hw.constant 0 : i7 | |
%c0_i109 = hw.constant 0 : i109 | |
%c0_i63 = hw.constant 0 : i63 | |
%c-1_i6 = hw.constant -1 : i6 | |
%c0_i52 = hw.constant 0 : i52 | |
%c0_i11 = hw.constant 0 : i11 | |
%c0_i32 = hw.constant 0 : i32 | |
%c0_i6 = hw.constant 0 : i6 | |
%c0_i49 = hw.constant 0 : i49 | |
%c0_i31 = hw.constant 0 : i31 | |
%c-1_i5 = hw.constant -1 : i5 | |
%c0_i4 = hw.constant 0 : i4 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i9 = hw.constant 0 : i9 | |
%c0_i23 = hw.constant 0 : i23 | |
%true = hw.constant true | |
%c0_i8 = hw.constant 0 : i8 | |
%false = hw.constant false | |
%c-2_i2 = hw.constant -2 : i2 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c0_i5 = hw.constant 0 : i5 | |
%c1_i2 = hw.constant 1 : i2 | |
%0 = seq.firreg %io_in_valid clock %clock reset sync %reset, %false {firrtl.random_init_start = 0 : ui64, sv.namehint = "in_valid"} : i1 | |
%1 = seq.firreg %6 clock %clock {firrtl.random_init_start = 1 : ui64, sv.namehint = "in_bits_cmd"} : i5 | |
%2 = seq.firreg %7 clock %clock {firrtl.random_init_start = 13 : ui64, sv.namehint = "in_bits_single"} : i1 | |
%3 = seq.firreg %8 clock %clock {firrtl.random_init_start = 21 : ui64, sv.namehint = "in_bits_rm"} : i3 | |
%4 = seq.firreg %9 clock %clock {firrtl.random_init_start = 24 : ui64, sv.namehint = "in_bits_typ"} : i2 | |
%5 = seq.firreg %10 clock %clock {firrtl.random_init_start = 26 : ui64, sv.namehint = "in_bits_in1"} : i65 | |
%6 = comb.mux bin %io_in_valid, %io_in_bits_cmd, %1 : i5 | |
%7 = comb.mux bin %io_in_valid, %io_in_bits_single, %2 : i1 | |
%8 = comb.mux bin %io_in_valid, %io_in_bits_rm, %3 : i3 | |
%9 = comb.mux bin %io_in_valid, %io_in_bits_typ, %4 : i2 | |
%10 = comb.mux bin %io_in_valid, %io_in_bits_in1, %5 : i65 | |
%11 = comb.extract %5 from 31 : (i65) -> i1 | |
%12 = comb.extract %5 from 23 : (i65) -> i8 | |
%13 = comb.extract %5 from 0 : (i65) -> i23 | |
%14 = comb.icmp bin eq %12, %c0_i8 : i8 | |
%15 = comb.icmp bin ne %13, %c0_i23 : i23 | |
%16 = comb.xor bin %15, %true : i1 | |
%17 = comb.and bin %14, %16 : i1 | |
%18 = comb.extract %5 from 7 : (i65) -> i16 | |
%19 = comb.icmp bin ne %18, %c0_i16 : i16 | |
%20 = comb.extract %5 from 15 : (i65) -> i8 | |
%21 = comb.icmp bin ne %20, %c0_i8 : i8 | |
%22 = comb.extract %5 from 19 : (i65) -> i4 | |
%23 = comb.icmp bin ne %22, %c0_i4 : i4 | |
%24 = comb.extract %5 from 22 : (i65) -> i1 | |
%25 = comb.extract %5 from 21 : (i65) -> i1 | |
%26 = comb.extract %5 from 20 : (i65) -> i1 | |
%27 = comb.concat %false, %26 : i1, i1 | |
%28 = comb.mux bin %25, %c-2_i2, %27 : i2 | |
%29 = comb.mux bin %24, %c-1_i2, %28 : i2 | |
%30 = comb.extract %5 from 18 : (i65) -> i1 | |
%31 = comb.extract %5 from 17 : (i65) -> i1 | |
%32 = comb.extract %5 from 16 : (i65) -> i1 | |
%33 = comb.concat %false, %32 : i1, i1 | |
%34 = comb.mux bin %31, %c-2_i2, %33 : i2 | |
%35 = comb.mux bin %30, %c-1_i2, %34 : i2 | |
%36 = comb.mux bin %23, %29, %35 : i2 | |
%37 = comb.concat %23, %36 : i1, i2 | |
%38 = comb.extract %5 from 11 : (i65) -> i4 | |
%39 = comb.icmp bin ne %38, %c0_i4 : i4 | |
%40 = comb.extract %5 from 14 : (i65) -> i1 | |
%41 = comb.extract %5 from 13 : (i65) -> i1 | |
%42 = comb.extract %5 from 12 : (i65) -> i1 | |
%43 = comb.concat %false, %42 : i1, i1 | |
%44 = comb.mux bin %41, %c-2_i2, %43 : i2 | |
%45 = comb.mux bin %40, %c-1_i2, %44 : i2 | |
%46 = comb.extract %5 from 10 : (i65) -> i1 | |
%47 = comb.extract %5 from 9 : (i65) -> i1 | |
%48 = comb.extract %5 from 8 : (i65) -> i1 | |
%49 = comb.concat %false, %48 : i1, i1 | |
%50 = comb.mux bin %47, %c-2_i2, %49 : i2 | |
%51 = comb.mux bin %46, %c-1_i2, %50 : i2 | |
%52 = comb.mux bin %39, %45, %51 : i2 | |
%53 = comb.concat %39, %52 : i1, i2 | |
%54 = comb.mux bin %21, %37, %53 : i3 | |
%55 = comb.concat %21, %54 : i1, i3 | |
%56 = comb.extract %5 from 0 : (i65) -> i7 | |
%57 = comb.icmp bin ne %56, %c0_i7 : i7 | |
%58 = comb.extract %5 from 3 : (i65) -> i4 | |
%59 = comb.icmp bin ne %58, %c0_i4 : i4 | |
%60 = comb.extract %5 from 6 : (i65) -> i1 | |
%61 = comb.extract %5 from 5 : (i65) -> i1 | |
%62 = comb.extract %5 from 4 : (i65) -> i1 | |
%63 = comb.concat %false, %62 : i1, i1 | |
%64 = comb.mux bin %61, %c-2_i2, %63 : i2 | |
%65 = comb.mux bin %60, %c-1_i2, %64 : i2 | |
%66 = comb.extract %5 from 2 : (i65) -> i1 | |
%67 = comb.extract %5 from 1 : (i65) -> i1 | |
%68 = comb.extract %5 from 0 : (i65) -> i1 | |
%69 = comb.concat %false, %68 : i1, i1 | |
%70 = comb.mux bin %67, %c-2_i2, %69 : i2 | |
%71 = comb.mux bin %66, %c-1_i2, %70 : i2 | |
%72 = comb.mux bin %59, %65, %71 : i2 | |
%73 = comb.concat %59, %72 : i1, i2 | |
%74 = comb.mux bin %57, %73, %c0_i3 : i3 | |
%75 = comb.concat %57, %74 : i1, i3 | |
%76 = comb.mux bin %19, %55, %75 : i4 | |
%77 = comb.concat %19, %76 : i1, i4 | |
%78 = comb.xor bin %77, %c-1_i5 : i5 | |
%79 = comb.concat %c0_i31, %13 : i31, i23 | |
%80 = comb.concat %c0_i49, %78 : i49, i5 | |
%81 = comb.shl bin %79, %80 : i54 | |
%82 = comb.extract %81 from 0 : (i54) -> i22 | |
%83 = comb.concat %82, %false : i22, i1 | |
%84 = comb.concat %c-1_i4, %19, %76 : i4, i1, i4 | |
%85 = comb.concat %false, %12 : i1, i8 | |
%86 = comb.mux bin %14, %84, %85 : i9 | |
%87 = comb.mux bin %14, %c-2_i2, %c1_i2 : i2 | |
%88 = comb.concat %c32_i7, %87 : i7, i2 | |
%89 = comb.add %86, %88 : i9 | |
%90 = comb.extract %89 from 7 : (i9) -> i2 | |
%91 = comb.icmp bin eq %90, %c-1_i2 : i2 | |
%92 = comb.and bin %91, %15 : i1 | |
%93 = comb.replicate %17 : (i1) -> i3 | |
%94 = comb.xor %93, %c-1_i3 : i3 | |
%95 = comb.concat %92, %c0_i6 : i1, i6 | |
%96 = comb.extract %94 from 1 : (i3) -> i2 | |
%97 = comb.and bin %90, %96 : i2 | |
%98 = comb.extract %89 from 0 : (i9) -> i7 | |
%99 = comb.extract %94 from 0 : (i3) -> i1 | |
%100 = comb.concat %99, %c-1_i6 : i1, i6 | |
%101 = comb.and bin %98, %100 : i7 | |
%102 = comb.or bin %101, %95 : i7 | |
%103 = comb.mux bin %14, %83, %13 : i23 | |
%104 = comb.concat %c0_i32, %11, %97, %102, %103 : i32, i1, i2, i7, i23 | |
%105 = comb.extract %5 from 63 : (i65) -> i1 | |
%106 = comb.extract %5 from 52 : (i65) -> i11 | |
%107 = comb.extract %5 from 0 : (i65) -> i52 | |
%108 = comb.icmp bin eq %106, %c0_i11 : i11 | |
%109 = comb.icmp bin ne %107, %c0_i52 : i52 | |
%110 = comb.xor bin %109, %true : i1 | |
%111 = comb.and bin %108, %110 : i1 | |
%112 = comb.extract %5 from 20 : (i65) -> i32 | |
%113 = comb.icmp bin ne %112, %c0_i32 : i32 | |
%114 = comb.extract %5 from 36 : (i65) -> i16 | |
%115 = comb.icmp bin ne %114, %c0_i16 : i16 | |
%116 = comb.extract %5 from 44 : (i65) -> i8 | |
%117 = comb.icmp bin ne %116, %c0_i8 : i8 | |
%118 = comb.extract %5 from 48 : (i65) -> i4 | |
%119 = comb.icmp bin ne %118, %c0_i4 : i4 | |
%120 = comb.extract %5 from 51 : (i65) -> i1 | |
%121 = comb.extract %5 from 50 : (i65) -> i1 | |
%122 = comb.extract %5 from 49 : (i65) -> i1 | |
%123 = comb.concat %false, %122 : i1, i1 | |
%124 = comb.mux bin %121, %c-2_i2, %123 : i2 | |
%125 = comb.mux bin %120, %c-1_i2, %124 : i2 | |
%126 = comb.extract %5 from 47 : (i65) -> i1 | |
%127 = comb.extract %5 from 46 : (i65) -> i1 | |
%128 = comb.extract %5 from 45 : (i65) -> i1 | |
%129 = comb.concat %false, %128 : i1, i1 | |
%130 = comb.mux bin %127, %c-2_i2, %129 : i2 | |
%131 = comb.mux bin %126, %c-1_i2, %130 : i2 | |
%132 = comb.mux bin %119, %125, %131 : i2 | |
%133 = comb.concat %119, %132 : i1, i2 | |
%134 = comb.extract %5 from 40 : (i65) -> i4 | |
%135 = comb.icmp bin ne %134, %c0_i4 : i4 | |
%136 = comb.extract %5 from 43 : (i65) -> i1 | |
%137 = comb.extract %5 from 42 : (i65) -> i1 | |
%138 = comb.extract %5 from 41 : (i65) -> i1 | |
%139 = comb.concat %false, %138 : i1, i1 | |
%140 = comb.mux bin %137, %c-2_i2, %139 : i2 | |
%141 = comb.mux bin %136, %c-1_i2, %140 : i2 | |
%142 = comb.extract %5 from 39 : (i65) -> i1 | |
%143 = comb.extract %5 from 38 : (i65) -> i1 | |
%144 = comb.extract %5 from 37 : (i65) -> i1 | |
%145 = comb.concat %false, %144 : i1, i1 | |
%146 = comb.mux bin %143, %c-2_i2, %145 : i2 | |
%147 = comb.mux bin %142, %c-1_i2, %146 : i2 | |
%148 = comb.mux bin %135, %141, %147 : i2 | |
%149 = comb.concat %135, %148 : i1, i2 | |
%150 = comb.mux bin %117, %133, %149 : i3 | |
%151 = comb.concat %117, %150 : i1, i3 | |
%152 = comb.extract %5 from 28 : (i65) -> i8 | |
%153 = comb.icmp bin ne %152, %c0_i8 : i8 | |
%154 = comb.extract %5 from 32 : (i65) -> i4 | |
%155 = comb.icmp bin ne %154, %c0_i4 : i4 | |
%156 = comb.extract %5 from 35 : (i65) -> i1 | |
%157 = comb.extract %5 from 34 : (i65) -> i1 | |
%158 = comb.extract %5 from 33 : (i65) -> i1 | |
%159 = comb.concat %false, %158 : i1, i1 | |
%160 = comb.mux bin %157, %c-2_i2, %159 : i2 | |
%161 = comb.mux bin %156, %c-1_i2, %160 : i2 | |
%162 = comb.extract %5 from 31 : (i65) -> i1 | |
%163 = comb.extract %5 from 30 : (i65) -> i1 | |
%164 = comb.extract %5 from 29 : (i65) -> i1 | |
%165 = comb.concat %false, %164 : i1, i1 | |
%166 = comb.mux bin %163, %c-2_i2, %165 : i2 | |
%167 = comb.mux bin %162, %c-1_i2, %166 : i2 | |
%168 = comb.mux bin %155, %161, %167 : i2 | |
%169 = comb.concat %155, %168 : i1, i2 | |
%170 = comb.extract %5 from 24 : (i65) -> i4 | |
%171 = comb.icmp bin ne %170, %c0_i4 : i4 | |
%172 = comb.extract %5 from 27 : (i65) -> i1 | |
%173 = comb.extract %5 from 26 : (i65) -> i1 | |
%174 = comb.extract %5 from 25 : (i65) -> i1 | |
%175 = comb.concat %false, %174 : i1, i1 | |
%176 = comb.mux bin %173, %c-2_i2, %175 : i2 | |
%177 = comb.mux bin %172, %c-1_i2, %176 : i2 | |
%178 = comb.extract %5 from 23 : (i65) -> i1 | |
%179 = comb.extract %5 from 22 : (i65) -> i1 | |
%180 = comb.extract %5 from 21 : (i65) -> i1 | |
%181 = comb.concat %false, %180 : i1, i1 | |
%182 = comb.mux bin %179, %c-2_i2, %181 : i2 | |
%183 = comb.mux bin %178, %c-1_i2, %182 : i2 | |
%184 = comb.mux bin %171, %177, %183 : i2 | |
%185 = comb.concat %171, %184 : i1, i2 | |
%186 = comb.mux bin %153, %169, %185 : i3 | |
%187 = comb.concat %153, %186 : i1, i3 | |
%188 = comb.mux bin %115, %151, %187 : i4 | |
%189 = comb.concat %115, %188 : i1, i4 | |
%190 = comb.extract %5 from 4 : (i65) -> i16 | |
%191 = comb.icmp bin ne %190, %c0_i16 : i16 | |
%192 = comb.extract %5 from 12 : (i65) -> i8 | |
%193 = comb.icmp bin ne %192, %c0_i8 : i8 | |
%194 = comb.extract %5 from 16 : (i65) -> i4 | |
%195 = comb.icmp bin ne %194, %c0_i4 : i4 | |
%196 = comb.extract %5 from 19 : (i65) -> i1 | |
%197 = comb.extract %5 from 18 : (i65) -> i1 | |
%198 = comb.extract %5 from 17 : (i65) -> i1 | |
%199 = comb.concat %false, %198 : i1, i1 | |
%200 = comb.mux bin %197, %c-2_i2, %199 : i2 | |
%201 = comb.mux bin %196, %c-1_i2, %200 : i2 | |
%202 = comb.extract %5 from 15 : (i65) -> i1 | |
%203 = comb.extract %5 from 14 : (i65) -> i1 | |
%204 = comb.extract %5 from 13 : (i65) -> i1 | |
%205 = comb.concat %false, %204 : i1, i1 | |
%206 = comb.mux bin %203, %c-2_i2, %205 : i2 | |
%207 = comb.mux bin %202, %c-1_i2, %206 : i2 | |
%208 = comb.mux bin %195, %201, %207 : i2 | |
%209 = comb.concat %195, %208 : i1, i2 | |
%210 = comb.extract %5 from 8 : (i65) -> i4 | |
%211 = comb.icmp bin ne %210, %c0_i4 : i4 | |
%212 = comb.extract %5 from 11 : (i65) -> i1 | |
%213 = comb.extract %5 from 10 : (i65) -> i1 | |
%214 = comb.extract %5 from 9 : (i65) -> i1 | |
%215 = comb.concat %false, %214 : i1, i1 | |
%216 = comb.mux bin %213, %c-2_i2, %215 : i2 | |
%217 = comb.mux bin %212, %c-1_i2, %216 : i2 | |
%218 = comb.extract %5 from 7 : (i65) -> i1 | |
%219 = comb.extract %5 from 6 : (i65) -> i1 | |
%220 = comb.extract %5 from 5 : (i65) -> i1 | |
%221 = comb.concat %false, %220 : i1, i1 | |
%222 = comb.mux bin %219, %c-2_i2, %221 : i2 | |
%223 = comb.mux bin %218, %c-1_i2, %222 : i2 | |
%224 = comb.mux bin %211, %217, %223 : i2 | |
%225 = comb.concat %211, %224 : i1, i2 | |
%226 = comb.mux bin %193, %209, %225 : i3 | |
%227 = comb.concat %193, %226 : i1, i3 | |
%228 = comb.extract %5 from 0 : (i65) -> i4 | |
%229 = comb.icmp bin ne %228, %c0_i4 : i4 | |
%230 = comb.extract %5 from 0 : (i65) -> i4 | |
%231 = comb.icmp bin ne %230, %c0_i4 : i4 | |
%232 = comb.extract %5 from 3 : (i65) -> i1 | |
%233 = comb.extract %5 from 2 : (i65) -> i1 | |
%234 = comb.extract %5 from 1 : (i65) -> i1 | |
%235 = comb.concat %false, %234 : i1, i1 | |
%236 = comb.mux bin %233, %c-2_i2, %235 : i2 | |
%237 = comb.mux bin %232, %c-1_i2, %236 : i2 | |
%238 = comb.mux bin %231, %237, %c0_i2 : i2 | |
%239 = comb.concat %231, %238 : i1, i2 | |
%240 = comb.mux bin %229, %239, %c0_i3 : i3 | |
%241 = comb.concat %229, %240 : i1, i3 | |
%242 = comb.mux bin %191, %227, %241 : i4 | |
%243 = comb.concat %191, %242 : i1, i4 | |
%244 = comb.mux bin %113, %189, %243 : i5 | |
%245 = comb.concat %113, %244 : i1, i5 | |
%246 = comb.xor bin %245, %c-1_i6 : i6 | |
%247 = comb.concat %c0_i63, %107 : i63, i52 | |
%248 = comb.concat %c0_i109, %246 : i109, i6 | |
%249 = comb.shl bin %247, %248 : i115 | |
%250 = comb.extract %249 from 0 : (i115) -> i51 | |
%251 = comb.concat %250, %false : i51, i1 | |
%252 = comb.concat %c-1_i6, %113, %244 : i6, i1, i5 | |
%253 = comb.concat %false, %106 : i1, i11 | |
%254 = comb.mux bin %108, %252, %253 : i12 | |
%255 = comb.mux bin %108, %c-2_i2, %c1_i2 : i2 | |
%256 = comb.concat %c256_i10, %255 : i10, i2 | |
%257 = comb.add %254, %256 : i12 | |
%258 = comb.extract %257 from 10 : (i12) -> i2 | |
%259 = comb.icmp bin eq %258, %c-1_i2 : i2 | |
%260 = comb.and bin %259, %109 : i1 | |
%261 = comb.replicate %111 : (i1) -> i3 | |
%262 = comb.xor %261, %c-1_i3 : i3 | |
%263 = comb.concat %260, %c0_i9 : i1, i9 | |
%264 = comb.extract %262 from 1 : (i3) -> i2 | |
%265 = comb.and bin %258, %264 : i2 | |
%266 = comb.extract %257 from 0 : (i12) -> i10 | |
%267 = comb.extract %262 from 0 : (i3) -> i1 | |
%268 = comb.concat %267, %c-1_i9 : i1, i9 | |
%269 = comb.and bin %266, %268 : i10 | |
%270 = comb.or bin %269, %263 : i10 | |
%271 = comb.mux bin %108, %251, %107 : i52 | |
%272 = comb.concat %105, %265, %270, %271 : i1, i2, i10, i52 | |
%273 = comb.mux bin %2, %104, %272 : i65 | |
%274 = comb.extract %5 from 0 : (i65) -> i32 | |
%275 = comb.extract %4 from 1 : (i2) -> i1 | |
%276 = comb.extract %4 from 0 : (i2) -> i1 | |
%277 = comb.extract %5 from 31 : (i65) -> i1 | |
%278 = comb.xor %276, %true : i1 | |
%279 = comb.and %278, %277 : i1 | |
%280 = comb.extract %5 from 0 : (i65) -> i64 | |
%281 = comb.replicate %279 : (i1) -> i32 | |
%282 = comb.concat %281, %274 : i32, i32 | |
%283 = comb.mux %275, %280, %282 {sv.namehint = "INToRecFN.io_in"} : i64 | |
%284 = comb.extract %1 from 2 : (i5) -> i1 | |
%INToRecFN.io_out, %INToRecFN.io_exceptionFlags = hw.instance "INToRecFN" @INToRecFN(io_signedIn: %285: i1, io_in: %283: i64, io_roundingMode: %286: i2) -> (io_out: i33, io_exceptionFlags: i5) {sv.namehint = "INToRecFN.io_out"} | |
%285 = comb.xor bin %276, %true {sv.namehint = "INToRecFN.io_signedIn"} : i1 | |
%286 = comb.extract %3 from 0 {sv.namehint = "INToRecFN.io_roundingMode"} : (i3) -> i2 | |
%INToRecFN_1.io_out, %INToRecFN_1.io_exceptionFlags = hw.instance "INToRecFN_1" @INToRecFN_1(io_signedIn: %285: i1, io_in: %283: i64, io_roundingMode: %286: i2) -> (io_out: i65, io_exceptionFlags: i5) {sv.namehint = "INToRecFN_1.io_out"} | |
%287 = comb.extract %INToRecFN_1.io_out from 33 : (i65) -> i32 | |
%288 = comb.concat %287, %INToRecFN.io_out : i32, i33 | |
%289 = comb.mux bin %2, %288, %INToRecFN_1.io_out : i65 | |
%290 = comb.mux bin %284, %273, %289 {sv.namehint = "mux_data"} : i65 | |
%291 = comb.mux bin %2, %INToRecFN.io_exceptionFlags, %INToRecFN_1.io_exceptionFlags : i5 | |
%292 = comb.mux bin %284, %c0_i5, %291 {sv.namehint = "mux_exc"} : i5 | |
%293 = seq.firreg %295 clock %clock {firrtl.random_init_start = 222 : ui64, sv.namehint = "io_out_bits_data"} : i65 | |
%294 = seq.firreg %296 clock %clock {firrtl.random_init_start = 287 : ui64, sv.namehint = "io_out_bits_exc"} : i5 | |
%295 = comb.mux bin %0, %290, %293 : i65 | |
%296 = comb.mux bin %0, %292, %294 : i5 | |
hw.output %293, %294 : i65, i5 | |
} | |
hw.module private @FPToFP(in %clock : !seq.clock, in %reset : i1, in %io_in_valid : i1, in %io_in_bits_cmd : i5, in %io_in_bits_single : i1, in %io_in_bits_rm : i3, in %io_in_bits_in1 : i65, in %io_in_bits_in2 : i65, out io_out_bits_data : i65, out io_out_bits_exc : i5, in %io_lt : i1) { | |
%c-1_i3 = hw.constant -1 : i3 | |
%c3_i3 = hw.constant 3 : i3 | |
%c0_i4 = hw.constant 0 : i4 | |
%true = hw.constant true | |
%false = hw.constant false | |
%c16143152864309542912_i65 = hw.constant 16143152864309542912 : i65 | |
%c0_i5 = hw.constant 0 : i5 | |
%c16143152868071833600_i65 = hw.constant 16143152868071833600 : i65 | |
%0 = seq.firreg %io_in_valid clock %clock reset sync %reset, %false {firrtl.random_init_start = 0 : ui64, sv.namehint = "in_valid"} : i1 | |
%1 = seq.firreg %6 clock %clock {firrtl.random_init_start = 1 : ui64, sv.namehint = "in_bits_cmd"} : i5 | |
%2 = seq.firreg %7 clock %clock {firrtl.random_init_start = 13 : ui64, sv.namehint = "in_bits_single"} : i1 | |
%3 = seq.firreg %8 clock %clock {firrtl.random_init_start = 21 : ui64, sv.namehint = "in_bits_rm"} : i3 | |
%4 = seq.firreg %9 clock %clock {firrtl.random_init_start = 26 : ui64, sv.namehint = "RecFNToRecFN.io_in"} : i65 | |
%5 = seq.firreg %10 clock %clock {firrtl.random_init_start = 91 : ui64, sv.namehint = "in_bits_in2"} : i65 | |
%6 = comb.mux bin %io_in_valid, %io_in_bits_cmd, %1 : i5 | |
%7 = comb.mux bin %io_in_valid, %io_in_bits_single, %2 : i1 | |
%8 = comb.mux bin %io_in_valid, %io_in_bits_rm, %3 : i3 | |
%9 = comb.mux bin %io_in_valid, %io_in_bits_in1, %4 : i65 | |
%10 = comb.mux bin %io_in_valid, %io_in_bits_in2, %5 : i65 | |
%11 = comb.extract %3 from 1 : (i3) -> i1 | |
%12 = comb.extract %4 from 32 : (i65) -> i33 | |
%13 = comb.extract %5 from 32 : (i65) -> i33 | |
%14 = comb.xor %12, %13 : i33 | |
%15 = comb.extract %3 from 0 : (i3) -> i1 | |
%16 = comb.replicate %15 : (i1) -> i33 | |
%17 = comb.extract %5 from 32 : (i65) -> i33 | |
%18 = comb.xor %16, %17 : i33 | |
%19 = comb.mux %11, %14, %18 {sv.namehint = "signNum"} : i33 | |
%20 = comb.extract %19 from 0 : (i33) -> i1 | |
%21 = comb.extract %4 from 0 : (i65) -> i32 | |
%22 = comb.extract %4 from 33 : (i65) -> i32 | |
%23 = comb.concat %22, %20, %21 : i32, i1, i32 | |
%24 = comb.extract %19 from 32 : (i33) -> i1 | |
%25 = comb.extract %4 from 0 : (i65) -> i64 | |
%26 = comb.concat %24, %25 : i1, i64 | |
%27 = comb.mux bin %2, %23, %26 {sv.namehint = "fsgnj"} : i65 | |
%28 = comb.extract %1 from 2 : (i5) -> i2 | |
%29 = comb.extract %1 from 0 : (i5) -> i1 | |
%30 = comb.concat %28, %29 : i2, i1 | |
%31 = comb.icmp bin eq %30, %c3_i3 : i3 | |
%32 = comb.extract %4 from 29 : (i65) -> i3 | |
%33 = comb.icmp ne %32, %c-1_i3 : i3 | |
%34 = comb.xor bin %33, %true : i1 | |
%35 = comb.extract %5 from 29 : (i65) -> i3 | |
%36 = comb.icmp eq %35, %c-1_i3 : i3 | |
%37 = comb.extract %4 from 22 : (i65) -> i1 | |
%38 = comb.xor bin %37, %true : i1 | |
%39 = comb.and bin %34, %38 : i1 | |
%40 = comb.extract %5 from 22 : (i65) -> i1 | |
%41 = comb.xor bin %40, %true : i1 | |
%42 = comb.and bin %36, %41 : i1 | |
%43 = comb.or bin %39, %42 : i1 | |
%44 = comb.and bin %34, %36 : i1 | |
%45 = comb.or bin %43, %44 : i1 | |
%46 = comb.icmp bin ne %15, %io_lt : i1 | |
%47 = comb.and bin %46, %33 : i1 | |
%48 = comb.or bin %36, %47 : i1 | |
%49 = comb.extract %4 from 61 : (i65) -> i3 | |
%50 = comb.icmp ne %49, %c-1_i3 : i3 | |
%51 = comb.xor bin %50, %true : i1 | |
%52 = comb.extract %5 from 61 : (i65) -> i3 | |
%53 = comb.icmp eq %52, %c-1_i3 : i3 | |
%54 = comb.extract %4 from 51 : (i65) -> i1 | |
%55 = comb.xor bin %54, %true : i1 | |
%56 = comb.and bin %51, %55 : i1 | |
%57 = comb.extract %5 from 51 : (i65) -> i1 | |
%58 = comb.xor bin %57, %true : i1 | |
%59 = comb.and bin %53, %58 : i1 | |
%60 = comb.or bin %56, %59 : i1 | |
%61 = comb.and bin %51, %53 : i1 | |
%62 = comb.or bin %60, %61 : i1 | |
%63 = comb.and bin %46, %50 : i1 | |
%64 = comb.or bin %53, %63 : i1 | |
%65 = comb.mux bin %2, %48, %64 : i1 | |
%66 = comb.mux bin %2, %43, %60 : i1 | |
%67 = comb.mux bin %2, %45, %62 : i1 | |
%68 = comb.mux bin %2, %c16143152868071833600_i65, %c16143152864309542912_i65 : i65 | |
%69 = comb.concat %66, %c0_i4 : i1, i4 | |
%70 = comb.mux bin %31, %69, %c0_i5 : i5 | |
%71 = comb.mux bin %65, %4, %5 : i65 | |
%72 = comb.mux bin %67, %68, %71 : i65 | |
%73 = comb.mux bin %31, %72, %27 : i65 | |
%74 = comb.extract %1 from 2 : (i5) -> i1 | |
%RecFNToRecFN.io_out, %RecFNToRecFN.io_exceptionFlags = hw.instance "RecFNToRecFN" @RecFNToRecFN(io_in: %4: i65, io_roundingMode: %75: i2) -> (io_out: i33, io_exceptionFlags: i5) {sv.namehint = "RecFNToRecFN.io_out"} | |
%75 = comb.extract %3 from 0 {sv.namehint = "RecFNToRecFN.io_roundingMode"} : (i3) -> i2 | |
%RecFNToRecFN_1.io_out, %RecFNToRecFN_1.io_exceptionFlags = hw.instance "RecFNToRecFN_1" @RecFNToRecFN_1(io_in: %76: i33) -> (io_out: i65, io_exceptionFlags: i5) {sv.namehint = "RecFNToRecFN_1.io_out"} | |
%76 = comb.extract %4 from 0 {sv.namehint = "RecFNToRecFN_1.io_in"} : (i65) -> i33 | |
%77 = comb.extract %RecFNToRecFN_1.io_out from 33 : (i65) -> i32 | |
%78 = comb.concat %77, %RecFNToRecFN.io_out : i32, i33 | |
%79 = comb.mux bin %2, %78, %RecFNToRecFN_1.io_out : i65 | |
%80 = comb.mux bin %74, %73, %79 {sv.namehint = "mux_data"} : i65 | |
%81 = comb.mux bin %2, %RecFNToRecFN.io_exceptionFlags, %RecFNToRecFN_1.io_exceptionFlags : i5 | |
%82 = comb.mux bin %74, %70, %81 {sv.namehint = "mux_exc"} : i5 | |
%83 = seq.firreg %85 clock %clock {firrtl.random_init_start = 222 : ui64, sv.namehint = "io_out_bits_data"} : i65 | |
%84 = seq.firreg %86 clock %clock {firrtl.random_init_start = 287 : ui64, sv.namehint = "io_out_bits_exc"} : i5 | |
%85 = comb.mux bin %0, %80, %83 : i65 | |
%86 = comb.mux bin %0, %82, %84 : i5 | |
hw.output %83, %84 : i65, i5 | |
} | |
hw.module private @FPUFMAPipe_1(in %clock : !seq.clock, in %reset : i1, in %io_in_valid : i1, in %io_in_bits_cmd : i5, in %io_in_bits_ren3 : i1, in %io_in_bits_swap23 : i1, in %io_in_bits_rm : i3, in %io_in_bits_in1 : i65, in %io_in_bits_in2 : i65, in %io_in_bits_in3 : i65, out io_out_bits_data : i65, out io_out_bits_exc : i5) { | |
%c0_i3 = hw.constant 0 : i3 | |
%c0_i64 = hw.constant 0 : i64 | |
%false = hw.constant false | |
%c9223372036854775808_i65 = hw.constant 9223372036854775808 : i65 | |
%0 = comb.extract %io_in_bits_in1 from 64 : (i65) -> i1 | |
%1 = comb.extract %io_in_bits_in2 from 64 : (i65) -> i1 | |
%2 = comb.xor bin %0, %1 : i1 | |
%3 = comb.concat %2, %c0_i64 {sv.namehint = "zero"} : i1, i64 | |
%valid = seq.firreg %io_in_valid clock %clock {firrtl.random_init_start = 0 : ui64} : i1 | |
%in_cmd = seq.firreg %11 clock %clock {firrtl.random_init_start = 1 : ui64} : i5 | |
%in_rm = seq.firreg %4 clock %clock {firrtl.random_init_start = 21 : ui64} : i3 | |
%in_in1 = seq.firreg %5 clock %clock {firrtl.random_init_start = 26 : ui64, sv.namehint = "in_in1"} : i65 | |
%in_in2 = seq.firreg %13 clock %clock {firrtl.random_init_start = 91 : ui64, sv.namehint = "in_in2"} : i65 | |
%in_in3 = seq.firreg %15 clock %clock {firrtl.random_init_start = 156 : ui64, sv.namehint = "in_in3"} : i65 | |
%4 = comb.mux bin %io_in_valid, %io_in_bits_rm, %in_rm : i3 | |
%5 = comb.mux bin %io_in_valid, %io_in_bits_in1, %in_in1 : i65 | |
%6 = comb.extract %io_in_bits_cmd from 1 : (i5) -> i1 | |
%7 = comb.or bin %io_in_bits_ren3, %io_in_bits_swap23 : i1 | |
%8 = comb.and bin %6, %7 : i1 | |
%9 = comb.extract %io_in_bits_cmd from 0 : (i5) -> i1 | |
%10 = comb.concat %c0_i3, %8, %9 : i3, i1, i1 | |
%11 = comb.mux bin %io_in_valid, %10, %in_cmd : i5 | |
%12 = comb.mux bin %io_in_bits_swap23, %c9223372036854775808_i65, %io_in_bits_in2 : i65 | |
%13 = comb.mux bin %io_in_valid, %12, %in_in2 : i65 | |
%14 = comb.mux bin %7, %io_in_bits_in3, %3 : i65 | |
%15 = comb.mux bin %io_in_valid, %14, %in_in3 : i65 | |
%fma.io_out, %fma.io_exceptionFlags = hw.instance "fma" @MulAddRecFN_1(io_op: %16: i2, io_a: %in_in1: i65, io_b: %in_in2: i65, io_c: %in_in3: i65, io_roundingMode: %17: i2) -> (io_out: i65, io_exceptionFlags: i5) {sv.namehint = "res_exc"} | |
%16 = comb.extract %in_cmd from 0 {sv.namehint = "fma.io_op"} : (i5) -> i2 | |
%17 = comb.extract %in_rm from 0 {sv.namehint = "fma.io_roundingMode"} : (i3) -> i2 | |
%18 = seq.firreg %valid clock %clock reset sync %reset, %false {firrtl.random_init_start = 221 : ui64} : i1 | |
%19 = seq.firreg %21 clock %clock {firrtl.random_init_start = 222 : ui64} : i65 | |
%20 = seq.firreg %22 clock %clock {firrtl.random_init_start = 287 : ui64} : i5 | |
%21 = comb.mux bin %valid, %fma.io_out, %19 : i65 | |
%22 = comb.mux bin %valid, %fma.io_exceptionFlags, %20 : i5 | |
%23 = seq.firreg %18 clock %clock reset sync %reset, %false {firrtl.random_init_start = 292 : ui64} : i1 | |
%24 = seq.firreg %26 clock %clock {firrtl.random_init_start = 293 : ui64} : i65 | |
%25 = seq.firreg %27 clock %clock {firrtl.random_init_start = 358 : ui64} : i5 | |
%26 = comb.mux bin %18, %19, %24 : i65 | |
%27 = comb.mux bin %18, %20, %25 : i5 | |
%28 = seq.firreg %30 clock %clock {firrtl.random_init_start = 364 : ui64, sv.namehint = "io_out_bits_data"} : i65 | |
%29 = seq.firreg %31 clock %clock {firrtl.random_init_start = 429 : ui64, sv.namehint = "io_out_bits_exc"} : i5 | |
%30 = comb.mux bin %23, %24, %28 : i65 | |
%31 = comb.mux bin %23, %25, %29 : i5 | |
hw.output %28, %29 : i65, i5 | |
} | |
hw.module private @DivSqrtRecF64(in %clock : !seq.clock, in %reset : i1, out io_inReady_div : i1, out io_inReady_sqrt : i1, in %io_inValid : i1, in %io_sqrtOp : i1, in %io_a : i65, in %io_b : i65, in %io_roundingMode : i2, out io_outValid_div : i1, out io_outValid_sqrt : i1, out io_out : i65, out io_exceptionFlags : i5) { | |
%ds.io_inReady_div, %ds.io_inReady_sqrt, %ds.io_outValid_div, %ds.io_outValid_sqrt, %ds.io_out, %ds.io_exceptionFlags, %ds.io_usingMulAdd, %ds.io_latchMulAddA_0, %ds.io_mulAddA_0, %ds.io_latchMulAddB_0, %ds.io_mulAddB_0, %ds.io_mulAddC_2 = hw.instance "ds" @DivSqrtRecF64_mulAddZ31(clock: %clock: !seq.clock, reset: %reset: i1, io_inValid: %io_inValid: i1, io_sqrtOp: %io_sqrtOp: i1, io_a: %io_a: i65, io_b: %io_b: i65, io_roundingMode: %io_roundingMode: i2, io_mulAddResult_3: %mul.io_result_s3: i105) -> (io_inReady_div: i1, io_inReady_sqrt: i1, io_outValid_div: i1, io_outValid_sqrt: i1, io_out: i65, io_exceptionFlags: i5, io_usingMulAdd: i4, io_latchMulAddA_0: i1, io_mulAddA_0: i54, io_latchMulAddB_0: i1, io_mulAddB_0: i54, io_mulAddC_2: i105) {sv.namehint = "ds.io_out"} | |
%mul.io_result_s3 = hw.instance "mul" @Mul54(clock: %clock: !seq.clock, io_val_s0: %0: i1, io_latch_a_s0: %ds.io_latchMulAddA_0: i1, io_a_s0: %ds.io_mulAddA_0: i54, io_latch_b_s0: %ds.io_latchMulAddB_0: i1, io_b_s0: %ds.io_mulAddB_0: i54, io_c_s2: %ds.io_mulAddC_2: i105) -> (io_result_s3: i105) {sv.namehint = "mul.io_result_s3"} | |
%0 = comb.extract %ds.io_usingMulAdd from 0 {sv.namehint = "mul.io_val_s0"} : (i4) -> i1 | |
hw.output %ds.io_inReady_div, %ds.io_inReady_sqrt, %ds.io_outValid_div, %ds.io_outValid_sqrt, %ds.io_out, %ds.io_exceptionFlags : i1, i1, i1, i1, i65, i5 | |
} | |
hw.module private @MulAddRecFN(in %io_op : i2, in %io_a : i33, in %io_b : i33, in %io_c : i33, in %io_roundingMode : i2, out io_out : i33, out io_exceptionFlags : i5) { | |
%false = hw.constant false | |
%c0_i24 = hw.constant 0 : i24 | |
%mulAddRecFN_preMul.io_mulAddA, %mulAddRecFN_preMul.io_mulAddB, %mulAddRecFN_preMul.io_mulAddC, %mulAddRecFN_preMul.io_toPostMul_highExpA, %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNA, %mulAddRecFN_preMul.io_toPostMul_highExpB, %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNB, %mulAddRecFN_preMul.io_toPostMul_signProd, %mulAddRecFN_preMul.io_toPostMul_isZeroProd, %mulAddRecFN_preMul.io_toPostMul_opSignC, %mulAddRecFN_preMul.io_toPostMul_highExpC, %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNC, %mulAddRecFN_preMul.io_toPostMul_isCDominant, %mulAddRecFN_preMul.io_toPostMul_CAlignDist_0, %mulAddRecFN_preMul.io_toPostMul_CAlignDist, %mulAddRecFN_preMul.io_toPostMul_bit0AlignedNegSigC, %mulAddRecFN_preMul.io_toPostMul_highAlignedNegSigC, %mulAddRecFN_preMul.io_toPostMul_sExpSum, %mulAddRecFN_preMul.io_toPostMul_roundingMode = hw.instance "mulAddRecFN_preMul" @MulAddRecFN_preMul(io_op: %io_op: i2, io_a: %io_a: i33, io_b: %io_b: i33, io_c: %io_c: i33, io_roundingMode: %io_roundingMode: i2) -> (io_mulAddA: i24, io_mulAddB: i24, io_mulAddC: i48, io_toPostMul_highExpA: i3, io_toPostMul_isNaN_isQuietNaNA: i1, io_toPostMul_highExpB: i3, io_toPostMul_isNaN_isQuietNaNB: i1, io_toPostMul_signProd: i1, io_toPostMul_isZeroProd: i1, io_toPostMul_opSignC: i1, io_toPostMul_highExpC: i3, io_toPostMul_isNaN_isQuietNaNC: i1, io_toPostMul_isCDominant: i1, io_toPostMul_CAlignDist_0: i1, io_toPostMul_CAlignDist: i7, io_toPostMul_bit0AlignedNegSigC: i1, io_toPostMul_highAlignedNegSigC: i26, io_toPostMul_sExpSum: i11, io_toPostMul_roundingMode: i2) {sv.namehint = "mulAddRecFN_preMul.io_mulAddC"} | |
%mulAddRecFN_postMul.io_out, %mulAddRecFN_postMul.io_exceptionFlags = hw.instance "mulAddRecFN_postMul" @MulAddRecFN_postMul(io_fromPreMul_highExpA: %mulAddRecFN_preMul.io_toPostMul_highExpA: i3, io_fromPreMul_isNaN_isQuietNaNA: %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNA: i1, io_fromPreMul_highExpB: %mulAddRecFN_preMul.io_toPostMul_highExpB: i3, io_fromPreMul_isNaN_isQuietNaNB: %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNB: i1, io_fromPreMul_signProd: %mulAddRecFN_preMul.io_toPostMul_signProd: i1, io_fromPreMul_isZeroProd: %mulAddRecFN_preMul.io_toPostMul_isZeroProd: i1, io_fromPreMul_opSignC: %mulAddRecFN_preMul.io_toPostMul_opSignC: i1, io_fromPreMul_highExpC: %mulAddRecFN_preMul.io_toPostMul_highExpC: i3, io_fromPreMul_isNaN_isQuietNaNC: %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNC: i1, io_fromPreMul_isCDominant: %mulAddRecFN_preMul.io_toPostMul_isCDominant: i1, io_fromPreMul_CAlignDist_0: %mulAddRecFN_preMul.io_toPostMul_CAlignDist_0: i1, io_fromPreMul_CAlignDist: %mulAddRecFN_preMul.io_toPostMul_CAlignDist: i7, io_fromPreMul_bit0AlignedNegSigC: %mulAddRecFN_preMul.io_toPostMul_bit0AlignedNegSigC: i1, io_fromPreMul_highAlignedNegSigC: %mulAddRecFN_preMul.io_toPostMul_highAlignedNegSigC: i26, io_fromPreMul_sExpSum: %mulAddRecFN_preMul.io_toPostMul_sExpSum: i11, io_fromPreMul_roundingMode: %mulAddRecFN_preMul.io_toPostMul_roundingMode: i2, io_mulAddResult: %5: i49) -> (io_out: i33, io_exceptionFlags: i5) {sv.namehint = "mulAddRecFN_postMul.io_out"} | |
%0 = comb.concat %c0_i24, %mulAddRecFN_preMul.io_mulAddA : i24, i24 | |
%1 = comb.concat %c0_i24, %mulAddRecFN_preMul.io_mulAddB : i24, i24 | |
%2 = comb.mul bin %0, %1 : i48 | |
%3 = comb.concat %false, %2 : i1, i48 | |
%4 = comb.concat %false, %mulAddRecFN_preMul.io_mulAddC : i1, i48 | |
%5 = comb.add %3, %4 {sv.namehint = "mulAddRecFN_postMul.io_mulAddResult"} : i49 | |
hw.output %mulAddRecFN_postMul.io_out, %mulAddRecFN_postMul.io_exceptionFlags : i33, i5 | |
} | |
hw.module private @CompareRecFN(in %io_a : i65, in %io_b : i65, in %io_signaling : i1, out io_lt : i1, out io_eq : i1, out io_exceptionFlags : i5) { | |
%c-1_i2 = hw.constant -1 : i2 | |
%true = hw.constant true | |
%c0_i3 = hw.constant 0 : i3 | |
%false = hw.constant false | |
%c0_i4 = hw.constant 0 : i4 | |
%0 = comb.extract %io_a from 52 : (i65) -> i12 | |
%1 = comb.extract %io_a from 61 : (i65) -> i3 | |
%2 = comb.icmp bin ne %1, %c0_i3 : i3 | |
%3 = comb.xor bin %2, %true {sv.namehint = "rawA_isZero"} : i1 | |
%4 = comb.extract %io_a from 62 : (i65) -> i2 | |
%5 = comb.icmp bin eq %4, %c-1_i2 : i2 | |
%6 = comb.extract %io_a from 64 {sv.namehint = "rawA_sign"} : (i65) -> i1 | |
%7 = comb.extract %io_a from 61 : (i65) -> i1 | |
%8 = comb.and bin %5, %7 {sv.namehint = "rawA_isNaN"} : i1 | |
%9 = comb.xor bin %7, %true : i1 | |
%10 = comb.concat %false, %0 {sv.namehint = "rawA_sExp"} : i1, i12 | |
%11 = comb.extract %io_a from 0 : (i65) -> i52 | |
%12 = comb.extract %io_b from 52 : (i65) -> i12 | |
%13 = comb.extract %io_b from 61 : (i65) -> i3 | |
%14 = comb.icmp bin ne %13, %c0_i3 : i3 | |
%15 = comb.xor bin %14, %true {sv.namehint = "rawB_isZero"} : i1 | |
%16 = comb.extract %io_b from 62 : (i65) -> i2 | |
%17 = comb.icmp bin eq %16, %c-1_i2 : i2 | |
%18 = comb.extract %io_b from 64 {sv.namehint = "rawB_sign"} : (i65) -> i1 | |
%19 = comb.extract %io_b from 61 : (i65) -> i1 | |
%20 = comb.and bin %17, %19 {sv.namehint = "rawB_isNaN"} : i1 | |
%21 = comb.xor bin %19, %true : i1 | |
%22 = comb.concat %false, %12 {sv.namehint = "rawB_sExp"} : i1, i12 | |
%23 = comb.extract %io_b from 0 : (i65) -> i52 | |
%24 = comb.xor bin %8, %true : i1 | |
%25 = comb.xor bin %20, %true : i1 | |
%26 = comb.and bin %24, %25 {sv.namehint = "ordered"} : i1 | |
%27 = comb.and bin %5, %9, %17, %21 {sv.namehint = "bothInfs"} : i1 | |
%28 = comb.and bin %3, %15 {sv.namehint = "bothZeros"} : i1 | |
%29 = comb.icmp bin eq %0, %12 {sv.namehint = "eqExps"} : i12 | |
%30 = comb.icmp bin slt %10, %22 : i13 | |
%31 = comb.concat %2, %11 : i1, i52 | |
%32 = comb.concat %14, %23 : i1, i52 | |
%33 = comb.icmp bin ult %31, %32 : i53 | |
%34 = comb.and bin %29, %33 : i1 | |
%35 = comb.or bin %30, %34 {sv.namehint = "common_ltMags"} : i1 | |
%36 = comb.concat %2, %11 : i1, i52 | |
%37 = comb.concat %14, %23 : i1, i52 | |
%38 = comb.icmp bin eq %36, %37 : i53 | |
%39 = comb.and bin %29, %38 {sv.namehint = "common_eqMags"} : i1 | |
%40 = comb.xor bin %28, %true : i1 | |
%41 = comb.xor bin %18, %true : i1 | |
%42 = comb.and bin %6, %41 : i1 | |
%43 = comb.xor bin %27, %true : i1 | |
%44 = comb.xor bin %35, %true : i1 | |
%45 = comb.xor bin %39, %true : i1 | |
%46 = comb.and bin %6, %44, %45 : i1 | |
%47 = comb.and bin %41, %35 : i1 | |
%48 = comb.or bin %46, %47 : i1 | |
%49 = comb.and bin %43, %48 : i1 | |
%50 = comb.or bin %42, %49 : i1 | |
%51 = comb.icmp bin eq %6, %18 : i1 | |
%52 = comb.or bin %27, %39 : i1 | |
%53 = comb.and bin %51, %52 : i1 | |
%54 = comb.or bin %28, %53 {sv.namehint = "ordered_eq"} : i1 | |
%55 = comb.extract %io_a from 51 : (i65) -> i1 | |
%56 = comb.xor bin %55, %true : i1 | |
%57 = comb.and bin %8, %56 : i1 | |
%58 = comb.extract %io_b from 51 : (i65) -> i1 | |
%59 = comb.xor bin %58, %true : i1 | |
%60 = comb.and bin %20, %59 : i1 | |
%61 = comb.xor bin %26, %true : i1 | |
%62 = comb.and bin %io_signaling, %61 : i1 | |
%63 = comb.or bin %57, %60, %62 {sv.namehint = "invalid"} : i1 | |
%64 = comb.and bin %26, %40, %50 {sv.namehint = "io_lt"} : i1 | |
%65 = comb.and bin %26, %54 {sv.namehint = "io_eq"} : i1 | |
%66 = comb.concat %63, %c0_i4 {sv.namehint = "io_exceptionFlags"} : i1, i4 | |
hw.output %64, %65, %66 : i1, i1, i5 | |
} | |
hw.module private @RecFNToIN(in %io_in : i65, in %io_roundingMode : i2, in %io_signedOut : i1, out io_out : i32, out io_intExceptionFlags : i3) { | |
%c0_i6 = hw.constant 0 : i6 | |
%c-1_i30 = hw.constant -1 : i30 | |
%c1_i32 = hw.constant 1 : i32 | |
%c-1_i11 = hw.constant -1 : i11 | |
%c30_i11 = hw.constant 30 : i11 | |
%c31_i11 = hw.constant 31 : i11 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i51 = hw.constant 0 : i51 | |
%c0_i79 = hw.constant 0 : i79 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c0_i3 = hw.constant 0 : i3 | |
%c-2_i2 = hw.constant -2 : i2 | |
%true = hw.constant true | |
%c0_i5 = hw.constant 0 : i5 | |
%c0_i31 = hw.constant 0 : i31 | |
%c0_i32 = hw.constant 0 : i32 | |
%0 = comb.extract %io_in from 64 {sv.namehint = "sign"} : (i65) -> i1 | |
%1 = comb.extract %io_in from 0 {sv.namehint = "fract"} : (i65) -> i52 | |
%2 = comb.extract %io_in from 61 : (i65) -> i3 | |
%3 = comb.icmp bin ne %2, %c0_i3 : i3 | |
%4 = comb.extract %io_in from 62 : (i65) -> i2 | |
%5 = comb.icmp bin eq %4, %c-1_i2 {sv.namehint = "invalid"} : i2 | |
%6 = comb.extract %io_in from 61 : (i65) -> i1 | |
%7 = comb.and bin %5, %6 {sv.namehint = "isNaN"} : i1 | |
%8 = comb.extract %io_in from 63 {sv.namehint = "notSpecial_magGeOne"} : (i65) -> i1 | |
%9 = comb.extract %io_in from 52 : (i65) -> i5 | |
%10 = comb.mux bin %8, %9, %c0_i5 : i5 | |
%11 = comb.concat %c0_i31, %8, %1 : i31, i1, i52 | |
%12 = comb.concat %c0_i79, %10 : i79, i5 | |
%13 = comb.shl bin %11, %12 {sv.namehint = "shiftedSig"} : i84 | |
%14 = comb.extract %13 from 52 {sv.namehint = "unroundedInt"} : (i84) -> i32 | |
%15 = comb.extract %13 from 51 : (i84) -> i2 | |
%16 = comb.extract %13 from 0 : (i84) -> i51 | |
%17 = comb.icmp bin ne %16, %c0_i51 : i51 | |
%18 = comb.extract %13 from 51 : (i84) -> i1 | |
%19 = comb.concat %18, %17 : i1, i1 | |
%20 = comb.icmp bin ne %19, %c0_i2 : i2 | |
%21 = comb.mux bin %8, %20, %3 {sv.namehint = "roundInexact"} : i1 | |
%22 = comb.icmp eq %15, %c-1_i2 : i2 | |
%23 = comb.icmp eq %19, %c-1_i2 : i2 | |
%24 = comb.or bin %22, %23 : i1 | |
%25 = comb.extract %io_in from 52 {sv.namehint = "posExp"} : (i65) -> i11 | |
%26 = comb.icmp eq %25, %c-1_i11 : i11 | |
%27 = comb.and %26, %20 : i1 | |
%28 = comb.mux bin %8, %24, %27 {sv.namehint = "roundIncr_nearestEven"} : i1 | |
%29 = comb.icmp bin eq %io_roundingMode, %c0_i2 : i2 | |
%30 = comb.and bin %29, %28 : i1 | |
%31 = comb.icmp bin eq %io_roundingMode, %c-2_i2 : i2 | |
%32 = comb.and bin %31, %0, %21 : i1 | |
%33 = comb.icmp bin eq %io_roundingMode, %c-1_i2 : i2 | |
%34 = comb.xor bin %0, %true : i1 | |
%35 = comb.and bin %33, %34, %21 : i1 | |
%36 = comb.or bin %30, %32, %35 {sv.namehint = "roundIncr"} : i1 | |
%37 = comb.replicate %0 : (i1) -> i32 | |
%38 = comb.xor %37, %14 {sv.namehint = "complUnroundedInt"} : i32 | |
%39 = comb.xor bin %36, %0 : i1 | |
%40 = comb.add %38, %c1_i32 : i32 | |
%41 = comb.mux bin %39, %40, %38 {sv.namehint = "roundedInt"} : i32 | |
%42 = comb.extract %13 from 52 : (i84) -> i30 | |
%43 = comb.icmp eq %42, %c-1_i30 : i30 | |
%44 = comb.and bin %43, %36 {sv.namehint = "roundCarryBut2"} : i1 | |
%45 = comb.extract %io_in from 57 : (i65) -> i6 | |
%46 = comb.icmp bin ne %45, %c0_i6 : i6 | |
%47 = comb.icmp bin eq %25, %c31_i11 : i11 | |
%48 = comb.extract %13 from 52 : (i84) -> i31 | |
%49 = comb.concat %34, %48 : i1, i31 | |
%50 = comb.icmp bin ne %49, %c0_i32 : i32 | |
%51 = comb.or bin %50, %36 : i1 | |
%52 = comb.and bin %47, %51 : i1 | |
%53 = comb.icmp bin eq %25, %c30_i11 : i11 | |
%54 = comb.and bin %34, %53, %44 : i1 | |
%55 = comb.or bin %46, %52, %54 : i1 | |
%56 = comb.and %8, %55 {sv.namehint = "overflow_signed"} : i1 | |
%57 = comb.extract %13 from 82 : (i84) -> i1 | |
%58 = comb.and bin %47, %57, %44 : i1 | |
%59 = comb.or bin %0, %46, %58 : i1 | |
%60 = comb.and bin %0, %36 : i1 | |
%61 = comb.mux bin %8, %59, %60 {sv.namehint = "overflow_unsigned"} : i1 | |
%62 = comb.mux bin %io_signedOut, %56, %61 {sv.namehint = "overflow"} : i1 | |
%63 = comb.xor bin %7, %true : i1 | |
%64 = comb.and bin %0, %63 {sv.namehint = "excSign"} : i1 | |
%65 = comb.and bin %io_signedOut, %64 : i1 | |
%66 = comb.xor bin %64, %true : i1 | |
%67 = comb.and bin %io_signedOut, %66 : i1 | |
%68 = comb.replicate %67 : (i1) -> i31 | |
%69 = comb.concat %65, %68 : i1, i31 | |
%70 = comb.xor bin %io_signedOut, %true : i1 | |
%71 = comb.and bin %70, %66 : i1 | |
%72 = comb.replicate %71 : (i1) -> i32 | |
%73 = comb.or bin %69, %72 {sv.namehint = "excValue"} : i32 | |
%74 = comb.xor bin %5, %true : i1 | |
%75 = comb.xor bin %62, %true : i1 | |
%76 = comb.and bin %21, %74, %75 {sv.namehint = "inexact"} : i1 | |
%77 = comb.or bin %5, %62 : i1 | |
%78 = comb.mux bin %77, %73, %41 {sv.namehint = "io_out"} : i32 | |
%79 = comb.concat %5, %62, %76 {sv.namehint = "io_intExceptionFlags"} : i1, i1, i1 | |
hw.output %78, %79 : i32, i3 | |
} | |
hw.module private @RecFNToIN_1(in %io_in : i65, in %io_roundingMode : i2, in %io_signedOut : i1, out io_out : i64, out io_intExceptionFlags : i3) { | |
%c0_i5 = hw.constant 0 : i5 | |
%c-1_i62 = hw.constant -1 : i62 | |
%c1_i64 = hw.constant 1 : i64 | |
%c-1_i11 = hw.constant -1 : i11 | |
%c62_i11 = hw.constant 62 : i11 | |
%c63_i11 = hw.constant 63 : i11 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i51 = hw.constant 0 : i51 | |
%c0_i110 = hw.constant 0 : i110 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c0_i3 = hw.constant 0 : i3 | |
%c-2_i2 = hw.constant -2 : i2 | |
%true = hw.constant true | |
%c0_i6 = hw.constant 0 : i6 | |
%c0_i63 = hw.constant 0 : i63 | |
%c0_i64 = hw.constant 0 : i64 | |
%0 = comb.extract %io_in from 64 {sv.namehint = "sign"} : (i65) -> i1 | |
%1 = comb.extract %io_in from 0 {sv.namehint = "fract"} : (i65) -> i52 | |
%2 = comb.extract %io_in from 61 : (i65) -> i3 | |
%3 = comb.icmp bin ne %2, %c0_i3 : i3 | |
%4 = comb.extract %io_in from 62 : (i65) -> i2 | |
%5 = comb.icmp bin eq %4, %c-1_i2 {sv.namehint = "invalid"} : i2 | |
%6 = comb.extract %io_in from 61 : (i65) -> i1 | |
%7 = comb.and bin %5, %6 {sv.namehint = "isNaN"} : i1 | |
%8 = comb.extract %io_in from 63 {sv.namehint = "notSpecial_magGeOne"} : (i65) -> i1 | |
%9 = comb.extract %io_in from 52 : (i65) -> i6 | |
%10 = comb.mux bin %8, %9, %c0_i6 : i6 | |
%11 = comb.concat %c0_i63, %8, %1 : i63, i1, i52 | |
%12 = comb.concat %c0_i110, %10 : i110, i6 | |
%13 = comb.shl bin %11, %12 {sv.namehint = "shiftedSig"} : i116 | |
%14 = comb.extract %13 from 52 {sv.namehint = "unroundedInt"} : (i116) -> i64 | |
%15 = comb.extract %13 from 51 : (i116) -> i2 | |
%16 = comb.extract %13 from 0 : (i116) -> i51 | |
%17 = comb.icmp bin ne %16, %c0_i51 : i51 | |
%18 = comb.extract %13 from 51 : (i116) -> i1 | |
%19 = comb.concat %18, %17 : i1, i1 | |
%20 = comb.icmp bin ne %19, %c0_i2 : i2 | |
%21 = comb.mux bin %8, %20, %3 {sv.namehint = "roundInexact"} : i1 | |
%22 = comb.icmp eq %15, %c-1_i2 : i2 | |
%23 = comb.icmp eq %19, %c-1_i2 : i2 | |
%24 = comb.or bin %22, %23 : i1 | |
%25 = comb.extract %io_in from 52 {sv.namehint = "posExp"} : (i65) -> i11 | |
%26 = comb.icmp eq %25, %c-1_i11 : i11 | |
%27 = comb.and %26, %20 : i1 | |
%28 = comb.mux bin %8, %24, %27 {sv.namehint = "roundIncr_nearestEven"} : i1 | |
%29 = comb.icmp bin eq %io_roundingMode, %c0_i2 : i2 | |
%30 = comb.and bin %29, %28 : i1 | |
%31 = comb.icmp bin eq %io_roundingMode, %c-2_i2 : i2 | |
%32 = comb.and bin %31, %0, %21 : i1 | |
%33 = comb.icmp bin eq %io_roundingMode, %c-1_i2 : i2 | |
%34 = comb.xor bin %0, %true : i1 | |
%35 = comb.and bin %33, %34, %21 : i1 | |
%36 = comb.or bin %30, %32, %35 {sv.namehint = "roundIncr"} : i1 | |
%37 = comb.replicate %0 : (i1) -> i64 | |
%38 = comb.xor %37, %14 {sv.namehint = "complUnroundedInt"} : i64 | |
%39 = comb.xor bin %36, %0 : i1 | |
%40 = comb.add %38, %c1_i64 : i64 | |
%41 = comb.mux bin %39, %40, %38 {sv.namehint = "roundedInt"} : i64 | |
%42 = comb.extract %13 from 52 : (i116) -> i62 | |
%43 = comb.icmp eq %42, %c-1_i62 : i62 | |
%44 = comb.and bin %43, %36 {sv.namehint = "roundCarryBut2"} : i1 | |
%45 = comb.extract %io_in from 58 : (i65) -> i5 | |
%46 = comb.icmp bin ne %45, %c0_i5 : i5 | |
%47 = comb.icmp bin eq %25, %c63_i11 : i11 | |
%48 = comb.extract %13 from 52 : (i116) -> i63 | |
%49 = comb.concat %34, %48 : i1, i63 | |
%50 = comb.icmp bin ne %49, %c0_i64 : i64 | |
%51 = comb.or bin %50, %36 : i1 | |
%52 = comb.and bin %47, %51 : i1 | |
%53 = comb.icmp bin eq %25, %c62_i11 : i11 | |
%54 = comb.and bin %34, %53, %44 : i1 | |
%55 = comb.or bin %46, %52, %54 : i1 | |
%56 = comb.and %8, %55 {sv.namehint = "overflow_signed"} : i1 | |
%57 = comb.extract %13 from 114 : (i116) -> i1 | |
%58 = comb.and bin %47, %57, %44 : i1 | |
%59 = comb.or bin %0, %46, %58 : i1 | |
%60 = comb.and bin %0, %36 : i1 | |
%61 = comb.mux bin %8, %59, %60 {sv.namehint = "overflow_unsigned"} : i1 | |
%62 = comb.mux bin %io_signedOut, %56, %61 {sv.namehint = "overflow"} : i1 | |
%63 = comb.xor bin %7, %true : i1 | |
%64 = comb.and bin %0, %63 {sv.namehint = "excSign"} : i1 | |
%65 = comb.and bin %io_signedOut, %64 : i1 | |
%66 = comb.xor bin %64, %true : i1 | |
%67 = comb.and bin %io_signedOut, %66 : i1 | |
%68 = comb.replicate %67 : (i1) -> i63 | |
%69 = comb.concat %65, %68 : i1, i63 | |
%70 = comb.xor bin %io_signedOut, %true : i1 | |
%71 = comb.and bin %70, %66 : i1 | |
%72 = comb.replicate %71 : (i1) -> i64 | |
%73 = comb.or bin %69, %72 {sv.namehint = "excValue"} : i64 | |
%74 = comb.xor bin %5, %true : i1 | |
%75 = comb.xor bin %62, %true : i1 | |
%76 = comb.and bin %21, %74, %75 {sv.namehint = "inexact"} : i1 | |
%77 = comb.or bin %5, %62 : i1 | |
%78 = comb.mux bin %77, %73, %41 {sv.namehint = "io_out"} : i64 | |
%79 = comb.concat %5, %62, %76 {sv.namehint = "io_intExceptionFlags"} : i1, i1, i1 | |
hw.output %78, %79 : i64, i3 | |
} | |
hw.module private @INToRecFN(in %io_signedIn : i1, in %io_in : i64, in %io_roundingMode : i2, out io_out : i33, out io_exceptionFlags : i5) { | |
%c0_i7 = hw.constant 0 : i7 | |
%c1_i25 = hw.constant 1 : i25 | |
%c0_i64 = hw.constant 0 : i64 | |
%c0_i39 = hw.constant 0 : i39 | |
%c0_i121 = hw.constant 0 : i121 | |
%c0_i63 = hw.constant 0 : i63 | |
%c-1_i6 = hw.constant -1 : i6 | |
%c0_i8 = hw.constant 0 : i8 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i32 = hw.constant 0 : i32 | |
%false = hw.constant false | |
%c-2_i2 = hw.constant -2 : i2 | |
%c-1_i2 = hw.constant -1 : i2 | |
%true = hw.constant true | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i4 = hw.constant 0 : i4 | |
%0 = comb.extract %io_in from 63 : (i64) -> i1 | |
%1 = comb.and bin %io_signedIn, %0 {sv.namehint = "sign"} : i1 | |
%2 = comb.sub %c0_i64, %io_in : i64 | |
%3 = comb.mux bin %1, %2, %io_in {sv.namehint = "absIn"} : i64 | |
%4 = comb.extract %3 from 32 : (i64) -> i32 | |
%5 = comb.icmp bin ne %4, %c0_i32 : i32 | |
%6 = comb.extract %3 from 48 : (i64) -> i16 | |
%7 = comb.icmp bin ne %6, %c0_i16 : i16 | |
%8 = comb.extract %3 from 56 : (i64) -> i8 | |
%9 = comb.icmp bin ne %8, %c0_i8 : i8 | |
%10 = comb.extract %3 from 60 : (i64) -> i4 | |
%11 = comb.icmp bin ne %10, %c0_i4 : i4 | |
%12 = comb.extract %3 from 63 : (i64) -> i1 | |
%13 = comb.extract %3 from 62 : (i64) -> i1 | |
%14 = comb.extract %3 from 61 : (i64) -> i1 | |
%15 = comb.concat %false, %14 : i1, i1 | |
%16 = comb.mux bin %13, %c-2_i2, %15 : i2 | |
%17 = comb.mux bin %12, %c-1_i2, %16 : i2 | |
%18 = comb.extract %3 from 59 : (i64) -> i1 | |
%19 = comb.extract %3 from 58 : (i64) -> i1 | |
%20 = comb.extract %3 from 57 : (i64) -> i1 | |
%21 = comb.concat %false, %20 : i1, i1 | |
%22 = comb.mux bin %19, %c-2_i2, %21 : i2 | |
%23 = comb.mux bin %18, %c-1_i2, %22 : i2 | |
%24 = comb.mux bin %11, %17, %23 : i2 | |
%25 = comb.concat %11, %24 : i1, i2 | |
%26 = comb.extract %3 from 52 : (i64) -> i4 | |
%27 = comb.icmp bin ne %26, %c0_i4 : i4 | |
%28 = comb.extract %3 from 55 : (i64) -> i1 | |
%29 = comb.extract %3 from 54 : (i64) -> i1 | |
%30 = comb.extract %3 from 53 : (i64) -> i1 | |
%31 = comb.concat %false, %30 : i1, i1 | |
%32 = comb.mux bin %29, %c-2_i2, %31 : i2 | |
%33 = comb.mux bin %28, %c-1_i2, %32 : i2 | |
%34 = comb.extract %3 from 51 : (i64) -> i1 | |
%35 = comb.extract %3 from 50 : (i64) -> i1 | |
%36 = comb.extract %3 from 49 : (i64) -> i1 | |
%37 = comb.concat %false, %36 : i1, i1 | |
%38 = comb.mux bin %35, %c-2_i2, %37 : i2 | |
%39 = comb.mux bin %34, %c-1_i2, %38 : i2 | |
%40 = comb.mux bin %27, %33, %39 : i2 | |
%41 = comb.concat %27, %40 : i1, i2 | |
%42 = comb.mux bin %9, %25, %41 : i3 | |
%43 = comb.concat %9, %42 : i1, i3 | |
%44 = comb.extract %3 from 40 : (i64) -> i8 | |
%45 = comb.icmp bin ne %44, %c0_i8 : i8 | |
%46 = comb.extract %3 from 44 : (i64) -> i4 | |
%47 = comb.icmp bin ne %46, %c0_i4 : i4 | |
%48 = comb.extract %3 from 47 : (i64) -> i1 | |
%49 = comb.extract %3 from 46 : (i64) -> i1 | |
%50 = comb.extract %3 from 45 : (i64) -> i1 | |
%51 = comb.concat %false, %50 : i1, i1 | |
%52 = comb.mux bin %49, %c-2_i2, %51 : i2 | |
%53 = comb.mux bin %48, %c-1_i2, %52 : i2 | |
%54 = comb.extract %3 from 43 : (i64) -> i1 | |
%55 = comb.extract %3 from 42 : (i64) -> i1 | |
%56 = comb.extract %3 from 41 : (i64) -> i1 | |
%57 = comb.concat %false, %56 : i1, i1 | |
%58 = comb.mux bin %55, %c-2_i2, %57 : i2 | |
%59 = comb.mux bin %54, %c-1_i2, %58 : i2 | |
%60 = comb.mux bin %47, %53, %59 : i2 | |
%61 = comb.concat %47, %60 : i1, i2 | |
%62 = comb.extract %3 from 36 : (i64) -> i4 | |
%63 = comb.icmp bin ne %62, %c0_i4 : i4 | |
%64 = comb.extract %3 from 39 : (i64) -> i1 | |
%65 = comb.extract %3 from 38 : (i64) -> i1 | |
%66 = comb.extract %3 from 37 : (i64) -> i1 | |
%67 = comb.concat %false, %66 : i1, i1 | |
%68 = comb.mux bin %65, %c-2_i2, %67 : i2 | |
%69 = comb.mux bin %64, %c-1_i2, %68 : i2 | |
%70 = comb.extract %3 from 35 : (i64) -> i1 | |
%71 = comb.extract %3 from 34 : (i64) -> i1 | |
%72 = comb.extract %3 from 33 : (i64) -> i1 | |
%73 = comb.concat %false, %72 : i1, i1 | |
%74 = comb.mux bin %71, %c-2_i2, %73 : i2 | |
%75 = comb.mux bin %70, %c-1_i2, %74 : i2 | |
%76 = comb.mux bin %63, %69, %75 : i2 | |
%77 = comb.concat %63, %76 : i1, i2 | |
%78 = comb.mux bin %45, %61, %77 : i3 | |
%79 = comb.concat %45, %78 : i1, i3 | |
%80 = comb.mux bin %7, %43, %79 : i4 | |
%81 = comb.concat %7, %80 : i1, i4 | |
%82 = comb.extract %3 from 16 : (i64) -> i16 | |
%83 = comb.icmp bin ne %82, %c0_i16 : i16 | |
%84 = comb.extract %3 from 24 : (i64) -> i8 | |
%85 = comb.icmp bin ne %84, %c0_i8 : i8 | |
%86 = comb.extract %3 from 28 : (i64) -> i4 | |
%87 = comb.icmp bin ne %86, %c0_i4 : i4 | |
%88 = comb.extract %3 from 31 : (i64) -> i1 | |
%89 = comb.extract %3 from 30 : (i64) -> i1 | |
%90 = comb.extract %3 from 29 : (i64) -> i1 | |
%91 = comb.concat %false, %90 : i1, i1 | |
%92 = comb.mux bin %89, %c-2_i2, %91 : i2 | |
%93 = comb.mux bin %88, %c-1_i2, %92 : i2 | |
%94 = comb.extract %3 from 27 : (i64) -> i1 | |
%95 = comb.extract %3 from 26 : (i64) -> i1 | |
%96 = comb.extract %3 from 25 : (i64) -> i1 | |
%97 = comb.concat %false, %96 : i1, i1 | |
%98 = comb.mux bin %95, %c-2_i2, %97 : i2 | |
%99 = comb.mux bin %94, %c-1_i2, %98 : i2 | |
%100 = comb.mux bin %87, %93, %99 : i2 | |
%101 = comb.concat %87, %100 : i1, i2 | |
%102 = comb.extract %3 from 20 : (i64) -> i4 | |
%103 = comb.icmp bin ne %102, %c0_i4 : i4 | |
%104 = comb.extract %3 from 23 : (i64) -> i1 | |
%105 = comb.extract %3 from 22 : (i64) -> i1 | |
%106 = comb.extract %3 from 21 : (i64) -> i1 | |
%107 = comb.concat %false, %106 : i1, i1 | |
%108 = comb.mux bin %105, %c-2_i2, %107 : i2 | |
%109 = comb.mux bin %104, %c-1_i2, %108 : i2 | |
%110 = comb.extract %3 from 19 : (i64) -> i1 | |
%111 = comb.extract %3 from 18 : (i64) -> i1 | |
%112 = comb.extract %3 from 17 : (i64) -> i1 | |
%113 = comb.concat %false, %112 : i1, i1 | |
%114 = comb.mux bin %111, %c-2_i2, %113 : i2 | |
%115 = comb.mux bin %110, %c-1_i2, %114 : i2 | |
%116 = comb.mux bin %103, %109, %115 : i2 | |
%117 = comb.concat %103, %116 : i1, i2 | |
%118 = comb.mux bin %85, %101, %117 : i3 | |
%119 = comb.concat %85, %118 : i1, i3 | |
%120 = comb.extract %3 from 8 : (i64) -> i8 | |
%121 = comb.icmp bin ne %120, %c0_i8 : i8 | |
%122 = comb.extract %3 from 12 : (i64) -> i4 | |
%123 = comb.icmp bin ne %122, %c0_i4 : i4 | |
%124 = comb.extract %3 from 15 : (i64) -> i1 | |
%125 = comb.extract %3 from 14 : (i64) -> i1 | |
%126 = comb.extract %3 from 13 : (i64) -> i1 | |
%127 = comb.concat %false, %126 : i1, i1 | |
%128 = comb.mux bin %125, %c-2_i2, %127 : i2 | |
%129 = comb.mux bin %124, %c-1_i2, %128 : i2 | |
%130 = comb.extract %3 from 11 : (i64) -> i1 | |
%131 = comb.extract %3 from 10 : (i64) -> i1 | |
%132 = comb.extract %3 from 9 : (i64) -> i1 | |
%133 = comb.concat %false, %132 : i1, i1 | |
%134 = comb.mux bin %131, %c-2_i2, %133 : i2 | |
%135 = comb.mux bin %130, %c-1_i2, %134 : i2 | |
%136 = comb.mux bin %123, %129, %135 : i2 | |
%137 = comb.concat %123, %136 : i1, i2 | |
%138 = comb.extract %3 from 4 : (i64) -> i4 | |
%139 = comb.icmp bin ne %138, %c0_i4 : i4 | |
%140 = comb.extract %3 from 7 : (i64) -> i1 | |
%141 = comb.extract %3 from 6 : (i64) -> i1 | |
%142 = comb.extract %3 from 5 : (i64) -> i1 | |
%143 = comb.concat %false, %142 : i1, i1 | |
%144 = comb.mux bin %141, %c-2_i2, %143 : i2 | |
%145 = comb.mux bin %140, %c-1_i2, %144 : i2 | |
%146 = comb.extract %3 from 3 : (i64) -> i1 | |
%147 = comb.extract %3 from 2 : (i64) -> i1 | |
%148 = comb.extract %3 from 1 : (i64) -> i1 | |
%149 = comb.concat %false, %148 : i1, i1 | |
%150 = comb.mux bin %147, %c-2_i2, %149 : i2 | |
%151 = comb.mux bin %146, %c-1_i2, %150 : i2 | |
%152 = comb.mux bin %139, %145, %151 : i2 | |
%153 = comb.concat %139, %152 : i1, i2 | |
%154 = comb.mux bin %121, %137, %153 : i3 | |
%155 = comb.concat %121, %154 : i1, i3 | |
%156 = comb.mux bin %83, %119, %155 : i4 | |
%157 = comb.concat %83, %156 : i1, i4 | |
%158 = comb.mux bin %5, %81, %157 : i5 | |
%159 = comb.concat %5, %158 : i1, i5 | |
%160 = comb.xor bin %159, %c-1_i6 {sv.namehint = "normCount"} : i6 | |
%161 = comb.concat %c0_i63, %3 : i63, i64 | |
%162 = comb.concat %c0_i121, %160 : i121, i6 | |
%163 = comb.shl bin %161, %162 : i127 | |
%164 = comb.extract %163 from 39 : (i127) -> i2 | |
%165 = comb.extract %163 from 0 : (i127) -> i39 | |
%166 = comb.icmp bin ne %165, %c0_i39 : i39 | |
%167 = comb.extract %163 from 39 : (i127) -> i1 | |
%168 = comb.concat %167, %166 : i1, i1 | |
%169 = comb.icmp bin ne %168, %c0_i2 {sv.namehint = "inexact"} : i2 | |
%170 = comb.icmp bin eq %io_roundingMode, %c0_i2 : i2 | |
%171 = comb.icmp eq %164, %c-1_i2 : i2 | |
%172 = comb.icmp eq %168, %c-1_i2 : i2 | |
%173 = comb.or bin %171, %172 : i1 | |
%174 = comb.and %170, %173 : i1 | |
%175 = comb.icmp bin eq %io_roundingMode, %c-2_i2 : i2 | |
%176 = comb.and %175, %1, %169 : i1 | |
%177 = comb.icmp bin eq %io_roundingMode, %c-1_i2 : i2 | |
%178 = comb.xor bin %1, %true : i1 | |
%179 = comb.and %177, %178, %169 : i1 | |
%180 = comb.or bin %174, %176, %179 {sv.namehint = "round"} : i1 | |
%181 = comb.extract %163 from 40 : (i127) -> i24 | |
%182 = comb.concat %false, %181 {sv.namehint = "unroundedNorm"} : i1, i24 | |
%183 = comb.concat %false, %181 : i1, i24 | |
%184 = comb.add %183, %c1_i25 : i25 | |
%185 = comb.mux bin %180, %184, %182 {sv.namehint = "roundedNorm"} : i25 | |
%186 = comb.extract %185 from 24 : (i25) -> i1 | |
%187 = comb.concat %c0_i2, %5, %158 : i2, i1, i5 | |
%188 = comb.concat %c0_i7, %186 : i7, i1 | |
%189 = comb.add %187, %188 {sv.namehint = "roundedExp"} : i8 | |
%190 = comb.extract %163 from 63 : (i127) -> i1 | |
%191 = comb.extract %185 from 0 : (i25) -> i23 | |
%192 = comb.concat %1, %190, %189, %191 {sv.namehint = "io_out"} : i1, i1, i8, i23 | |
%193 = comb.concat %c0_i4, %169 {sv.namehint = "io_exceptionFlags"} : i4, i1 | |
hw.output %192, %193 : i33, i5 | |
} | |
hw.module private @INToRecFN_1(in %io_signedIn : i1, in %io_in : i64, in %io_roundingMode : i2, out io_out : i65, out io_exceptionFlags : i5) { | |
%c0_i5 = hw.constant 0 : i5 | |
%c1_i54 = hw.constant 1 : i54 | |
%c0_i64 = hw.constant 0 : i64 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i10 = hw.constant 0 : i10 | |
%c0_i121 = hw.constant 0 : i121 | |
%c0_i63 = hw.constant 0 : i63 | |
%c-1_i6 = hw.constant -1 : i6 | |
%c0_i8 = hw.constant 0 : i8 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i32 = hw.constant 0 : i32 | |
%false = hw.constant false | |
%c-2_i2 = hw.constant -2 : i2 | |
%c-1_i2 = hw.constant -1 : i2 | |
%true = hw.constant true | |
%c0_i4 = hw.constant 0 : i4 | |
%0 = comb.extract %io_in from 63 : (i64) -> i1 | |
%1 = comb.and bin %io_signedIn, %0 {sv.namehint = "sign"} : i1 | |
%2 = comb.sub %c0_i64, %io_in : i64 | |
%3 = comb.mux bin %1, %2, %io_in {sv.namehint = "absIn"} : i64 | |
%4 = comb.extract %3 from 32 : (i64) -> i32 | |
%5 = comb.icmp bin ne %4, %c0_i32 : i32 | |
%6 = comb.extract %3 from 48 : (i64) -> i16 | |
%7 = comb.icmp bin ne %6, %c0_i16 : i16 | |
%8 = comb.extract %3 from 56 : (i64) -> i8 | |
%9 = comb.icmp bin ne %8, %c0_i8 : i8 | |
%10 = comb.extract %3 from 60 : (i64) -> i4 | |
%11 = comb.icmp bin ne %10, %c0_i4 : i4 | |
%12 = comb.extract %3 from 63 : (i64) -> i1 | |
%13 = comb.extract %3 from 62 : (i64) -> i1 | |
%14 = comb.extract %3 from 61 : (i64) -> i1 | |
%15 = comb.concat %false, %14 : i1, i1 | |
%16 = comb.mux bin %13, %c-2_i2, %15 : i2 | |
%17 = comb.mux bin %12, %c-1_i2, %16 : i2 | |
%18 = comb.extract %3 from 59 : (i64) -> i1 | |
%19 = comb.extract %3 from 58 : (i64) -> i1 | |
%20 = comb.extract %3 from 57 : (i64) -> i1 | |
%21 = comb.concat %false, %20 : i1, i1 | |
%22 = comb.mux bin %19, %c-2_i2, %21 : i2 | |
%23 = comb.mux bin %18, %c-1_i2, %22 : i2 | |
%24 = comb.mux bin %11, %17, %23 : i2 | |
%25 = comb.concat %11, %24 : i1, i2 | |
%26 = comb.extract %3 from 52 : (i64) -> i4 | |
%27 = comb.icmp bin ne %26, %c0_i4 : i4 | |
%28 = comb.extract %3 from 55 : (i64) -> i1 | |
%29 = comb.extract %3 from 54 : (i64) -> i1 | |
%30 = comb.extract %3 from 53 : (i64) -> i1 | |
%31 = comb.concat %false, %30 : i1, i1 | |
%32 = comb.mux bin %29, %c-2_i2, %31 : i2 | |
%33 = comb.mux bin %28, %c-1_i2, %32 : i2 | |
%34 = comb.extract %3 from 51 : (i64) -> i1 | |
%35 = comb.extract %3 from 50 : (i64) -> i1 | |
%36 = comb.extract %3 from 49 : (i64) -> i1 | |
%37 = comb.concat %false, %36 : i1, i1 | |
%38 = comb.mux bin %35, %c-2_i2, %37 : i2 | |
%39 = comb.mux bin %34, %c-1_i2, %38 : i2 | |
%40 = comb.mux bin %27, %33, %39 : i2 | |
%41 = comb.concat %27, %40 : i1, i2 | |
%42 = comb.mux bin %9, %25, %41 : i3 | |
%43 = comb.concat %9, %42 : i1, i3 | |
%44 = comb.extract %3 from 40 : (i64) -> i8 | |
%45 = comb.icmp bin ne %44, %c0_i8 : i8 | |
%46 = comb.extract %3 from 44 : (i64) -> i4 | |
%47 = comb.icmp bin ne %46, %c0_i4 : i4 | |
%48 = comb.extract %3 from 47 : (i64) -> i1 | |
%49 = comb.extract %3 from 46 : (i64) -> i1 | |
%50 = comb.extract %3 from 45 : (i64) -> i1 | |
%51 = comb.concat %false, %50 : i1, i1 | |
%52 = comb.mux bin %49, %c-2_i2, %51 : i2 | |
%53 = comb.mux bin %48, %c-1_i2, %52 : i2 | |
%54 = comb.extract %3 from 43 : (i64) -> i1 | |
%55 = comb.extract %3 from 42 : (i64) -> i1 | |
%56 = comb.extract %3 from 41 : (i64) -> i1 | |
%57 = comb.concat %false, %56 : i1, i1 | |
%58 = comb.mux bin %55, %c-2_i2, %57 : i2 | |
%59 = comb.mux bin %54, %c-1_i2, %58 : i2 | |
%60 = comb.mux bin %47, %53, %59 : i2 | |
%61 = comb.concat %47, %60 : i1, i2 | |
%62 = comb.extract %3 from 36 : (i64) -> i4 | |
%63 = comb.icmp bin ne %62, %c0_i4 : i4 | |
%64 = comb.extract %3 from 39 : (i64) -> i1 | |
%65 = comb.extract %3 from 38 : (i64) -> i1 | |
%66 = comb.extract %3 from 37 : (i64) -> i1 | |
%67 = comb.concat %false, %66 : i1, i1 | |
%68 = comb.mux bin %65, %c-2_i2, %67 : i2 | |
%69 = comb.mux bin %64, %c-1_i2, %68 : i2 | |
%70 = comb.extract %3 from 35 : (i64) -> i1 | |
%71 = comb.extract %3 from 34 : (i64) -> i1 | |
%72 = comb.extract %3 from 33 : (i64) -> i1 | |
%73 = comb.concat %false, %72 : i1, i1 | |
%74 = comb.mux bin %71, %c-2_i2, %73 : i2 | |
%75 = comb.mux bin %70, %c-1_i2, %74 : i2 | |
%76 = comb.mux bin %63, %69, %75 : i2 | |
%77 = comb.concat %63, %76 : i1, i2 | |
%78 = comb.mux bin %45, %61, %77 : i3 | |
%79 = comb.concat %45, %78 : i1, i3 | |
%80 = comb.mux bin %7, %43, %79 : i4 | |
%81 = comb.concat %7, %80 : i1, i4 | |
%82 = comb.extract %3 from 16 : (i64) -> i16 | |
%83 = comb.icmp bin ne %82, %c0_i16 : i16 | |
%84 = comb.extract %3 from 24 : (i64) -> i8 | |
%85 = comb.icmp bin ne %84, %c0_i8 : i8 | |
%86 = comb.extract %3 from 28 : (i64) -> i4 | |
%87 = comb.icmp bin ne %86, %c0_i4 : i4 | |
%88 = comb.extract %3 from 31 : (i64) -> i1 | |
%89 = comb.extract %3 from 30 : (i64) -> i1 | |
%90 = comb.extract %3 from 29 : (i64) -> i1 | |
%91 = comb.concat %false, %90 : i1, i1 | |
%92 = comb.mux bin %89, %c-2_i2, %91 : i2 | |
%93 = comb.mux bin %88, %c-1_i2, %92 : i2 | |
%94 = comb.extract %3 from 27 : (i64) -> i1 | |
%95 = comb.extract %3 from 26 : (i64) -> i1 | |
%96 = comb.extract %3 from 25 : (i64) -> i1 | |
%97 = comb.concat %false, %96 : i1, i1 | |
%98 = comb.mux bin %95, %c-2_i2, %97 : i2 | |
%99 = comb.mux bin %94, %c-1_i2, %98 : i2 | |
%100 = comb.mux bin %87, %93, %99 : i2 | |
%101 = comb.concat %87, %100 : i1, i2 | |
%102 = comb.extract %3 from 20 : (i64) -> i4 | |
%103 = comb.icmp bin ne %102, %c0_i4 : i4 | |
%104 = comb.extract %3 from 23 : (i64) -> i1 | |
%105 = comb.extract %3 from 22 : (i64) -> i1 | |
%106 = comb.extract %3 from 21 : (i64) -> i1 | |
%107 = comb.concat %false, %106 : i1, i1 | |
%108 = comb.mux bin %105, %c-2_i2, %107 : i2 | |
%109 = comb.mux bin %104, %c-1_i2, %108 : i2 | |
%110 = comb.extract %3 from 19 : (i64) -> i1 | |
%111 = comb.extract %3 from 18 : (i64) -> i1 | |
%112 = comb.extract %3 from 17 : (i64) -> i1 | |
%113 = comb.concat %false, %112 : i1, i1 | |
%114 = comb.mux bin %111, %c-2_i2, %113 : i2 | |
%115 = comb.mux bin %110, %c-1_i2, %114 : i2 | |
%116 = comb.mux bin %103, %109, %115 : i2 | |
%117 = comb.concat %103, %116 : i1, i2 | |
%118 = comb.mux bin %85, %101, %117 : i3 | |
%119 = comb.concat %85, %118 : i1, i3 | |
%120 = comb.extract %3 from 8 : (i64) -> i8 | |
%121 = comb.icmp bin ne %120, %c0_i8 : i8 | |
%122 = comb.extract %3 from 12 : (i64) -> i4 | |
%123 = comb.icmp bin ne %122, %c0_i4 : i4 | |
%124 = comb.extract %3 from 15 : (i64) -> i1 | |
%125 = comb.extract %3 from 14 : (i64) -> i1 | |
%126 = comb.extract %3 from 13 : (i64) -> i1 | |
%127 = comb.concat %false, %126 : i1, i1 | |
%128 = comb.mux bin %125, %c-2_i2, %127 : i2 | |
%129 = comb.mux bin %124, %c-1_i2, %128 : i2 | |
%130 = comb.extract %3 from 11 : (i64) -> i1 | |
%131 = comb.extract %3 from 10 : (i64) -> i1 | |
%132 = comb.extract %3 from 9 : (i64) -> i1 | |
%133 = comb.concat %false, %132 : i1, i1 | |
%134 = comb.mux bin %131, %c-2_i2, %133 : i2 | |
%135 = comb.mux bin %130, %c-1_i2, %134 : i2 | |
%136 = comb.mux bin %123, %129, %135 : i2 | |
%137 = comb.concat %123, %136 : i1, i2 | |
%138 = comb.extract %3 from 4 : (i64) -> i4 | |
%139 = comb.icmp bin ne %138, %c0_i4 : i4 | |
%140 = comb.extract %3 from 7 : (i64) -> i1 | |
%141 = comb.extract %3 from 6 : (i64) -> i1 | |
%142 = comb.extract %3 from 5 : (i64) -> i1 | |
%143 = comb.concat %false, %142 : i1, i1 | |
%144 = comb.mux bin %141, %c-2_i2, %143 : i2 | |
%145 = comb.mux bin %140, %c-1_i2, %144 : i2 | |
%146 = comb.extract %3 from 3 : (i64) -> i1 | |
%147 = comb.extract %3 from 2 : (i64) -> i1 | |
%148 = comb.extract %3 from 1 : (i64) -> i1 | |
%149 = comb.concat %false, %148 : i1, i1 | |
%150 = comb.mux bin %147, %c-2_i2, %149 : i2 | |
%151 = comb.mux bin %146, %c-1_i2, %150 : i2 | |
%152 = comb.mux bin %139, %145, %151 : i2 | |
%153 = comb.concat %139, %152 : i1, i2 | |
%154 = comb.mux bin %121, %137, %153 : i3 | |
%155 = comb.concat %121, %154 : i1, i3 | |
%156 = comb.mux bin %83, %119, %155 : i4 | |
%157 = comb.concat %83, %156 : i1, i4 | |
%158 = comb.mux bin %5, %81, %157 : i5 | |
%159 = comb.concat %5, %158 : i1, i5 | |
%160 = comb.xor bin %159, %c-1_i6 {sv.namehint = "normCount"} : i6 | |
%161 = comb.concat %c0_i63, %3 : i63, i64 | |
%162 = comb.concat %c0_i121, %160 : i121, i6 | |
%163 = comb.shl bin %161, %162 : i127 | |
%164 = comb.extract %163 from 10 : (i127) -> i2 | |
%165 = comb.extract %163 from 0 : (i127) -> i10 | |
%166 = comb.icmp bin ne %165, %c0_i10 : i10 | |
%167 = comb.extract %163 from 10 : (i127) -> i1 | |
%168 = comb.concat %167, %166 : i1, i1 | |
%169 = comb.icmp bin ne %168, %c0_i2 {sv.namehint = "inexact"} : i2 | |
%170 = comb.icmp bin eq %io_roundingMode, %c0_i2 : i2 | |
%171 = comb.icmp eq %164, %c-1_i2 : i2 | |
%172 = comb.icmp eq %168, %c-1_i2 : i2 | |
%173 = comb.or bin %171, %172 : i1 | |
%174 = comb.and %170, %173 : i1 | |
%175 = comb.icmp bin eq %io_roundingMode, %c-2_i2 : i2 | |
%176 = comb.and %175, %1, %169 : i1 | |
%177 = comb.icmp bin eq %io_roundingMode, %c-1_i2 : i2 | |
%178 = comb.xor bin %1, %true : i1 | |
%179 = comb.and %177, %178, %169 : i1 | |
%180 = comb.or bin %174, %176, %179 {sv.namehint = "round"} : i1 | |
%181 = comb.extract %163 from 11 : (i127) -> i53 | |
%182 = comb.concat %false, %181 {sv.namehint = "unroundedNorm"} : i1, i53 | |
%183 = comb.concat %false, %181 : i1, i53 | |
%184 = comb.add %183, %c1_i54 : i54 | |
%185 = comb.mux bin %180, %184, %182 {sv.namehint = "roundedNorm"} : i54 | |
%186 = comb.extract %185 from 53 : (i54) -> i1 | |
%187 = comb.concat %c0_i5, %5, %158 : i5, i1, i5 | |
%188 = comb.concat %c0_i10, %186 : i10, i1 | |
%189 = comb.add %187, %188 {sv.namehint = "roundedExp"} : i11 | |
%190 = comb.extract %163 from 63 : (i127) -> i1 | |
%191 = comb.extract %185 from 0 : (i54) -> i52 | |
%192 = comb.concat %1, %190, %189, %191 {sv.namehint = "io_out"} : i1, i1, i11, i52 | |
%193 = comb.concat %c0_i4, %169 {sv.namehint = "io_exceptionFlags"} : i4, i1 | |
hw.output %192, %193 : i65, i5 | |
} | |
hw.module private @RecFNToRecFN(in %io_in : i65, in %io_roundingMode : i2, out io_out : i33, out io_exceptionFlags : i5) { | |
%c0_i28 = hw.constant 0 : i28 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i14 = hw.constant 0 : i14 | |
%c-1792_i14 = hw.constant -1792 : i14 | |
%c0_i4 = hw.constant 0 : i4 | |
%c-1_i2 = hw.constant -1 : i2 | |
%true = hw.constant true | |
%c0_i3 = hw.constant 0 : i3 | |
%false = hw.constant false | |
%c-4_i9 = hw.constant -4 : i9 | |
%0 = comb.extract %io_in from 52 : (i65) -> i12 | |
%1 = comb.extract %io_in from 61 : (i65) -> i3 | |
%2 = comb.icmp bin ne %1, %c0_i3 : i3 | |
%3 = comb.xor bin %2, %true {sv.namehint = "outRawFloat_isZero"} : i1 | |
%4 = comb.extract %io_in from 62 : (i65) -> i2 | |
%5 = comb.icmp bin eq %4, %c-1_i2 : i2 | |
%6 = comb.extract %io_in from 64 {sv.namehint = "outRawFloat_sign"} : (i65) -> i1 | |
%7 = comb.extract %io_in from 61 : (i65) -> i1 | |
%8 = comb.and bin %5, %7 {sv.namehint = "outRawFloat_isNaN"} : i1 | |
%9 = comb.xor bin %7, %true : i1 | |
%10 = comb.and bin %5, %9 {sv.namehint = "outRawFloat_isInf"} : i1 | |
%11 = comb.concat %c0_i2, %0 : i2, i12 | |
%12 = comb.add bin %11, %c-1792_i14 : i14 | |
%13 = comb.icmp bin slt %12, %c0_i14 : i14 | |
%14 = comb.extract %12 from 9 : (i14) -> i4 | |
%15 = comb.icmp bin ne %14, %c0_i4 : i4 | |
%16 = comb.extract %12 from 0 : (i14) -> i9 | |
%17 = comb.mux bin %15, %c-4_i9, %16 : i9 | |
%18 = comb.concat %13, %17 {sv.namehint = "outRawFloat_sExp"} : i1, i9 | |
%19 = comb.extract %io_in from 28 : (i65) -> i24 | |
%20 = comb.extract %io_in from 0 : (i65) -> i28 | |
%21 = comb.icmp bin ne %20, %c0_i28 : i28 | |
%22 = comb.concat %false, %2, %19, %21 {sv.namehint = "outRawFloat_sig"} : i1, i1, i24, i1 | |
%23 = comb.extract %io_in from 51 : (i65) -> i1 | |
%24 = comb.xor bin %23, %true : i1 | |
%25 = comb.and bin %8, %24 {sv.namehint = "invalidExc"} : i1 | |
%RoundRawFNToRecFN.io_out, %RoundRawFNToRecFN.io_exceptionFlags = hw.instance "RoundRawFNToRecFN" @RoundRawFNToRecFN(io_invalidExc: %25: i1, io_in_sign: %6: i1, io_in_isNaN: %8: i1, io_in_isInf: %10: i1, io_in_isZero: %3: i1, io_in_sExp: %18: i10, io_in_sig: %22: i27, io_roundingMode: %io_roundingMode: i2) -> (io_out: i33, io_exceptionFlags: i5) {sv.namehint = "RoundRawFNToRecFN.io_out"} | |
hw.output %RoundRawFNToRecFN.io_out, %RoundRawFNToRecFN.io_exceptionFlags : i33, i5 | |
} | |
hw.module private @RecFNToRecFN_1(in %io_in : i33, out io_out : i65, out io_exceptionFlags : i5) { | |
%c0_i29 = hw.constant 0 : i29 | |
%c-1_i9 = hw.constant -1 : i9 | |
%c1792_i12 = hw.constant 1792 : i12 | |
%c-1_i12 = hw.constant -1 : i12 | |
%c-1_i2 = hw.constant -1 : i2 | |
%true = hw.constant true | |
%c0_i3 = hw.constant 0 : i3 | |
%c-1024_i12 = hw.constant -1024 : i12 | |
%c-512_i12 = hw.constant -512 : i12 | |
%c0_i4 = hw.constant 0 : i4 | |
%c0_i12 = hw.constant 0 : i12 | |
%c-2251799813685248_i52 = hw.constant -2251799813685248 : i52 | |
%0 = comb.extract %io_in from 23 : (i33) -> i9 | |
%1 = comb.extract %io_in from 29 : (i33) -> i3 | |
%2 = comb.icmp bin ne %1, %c0_i3 : i3 | |
%3 = comb.xor bin %2, %true {sv.namehint = "outRawFloat_isZero"} : i1 | |
%4 = comb.extract %io_in from 30 : (i33) -> i2 | |
%5 = comb.icmp bin eq %4, %c-1_i2 : i2 | |
%6 = comb.extract %io_in from 32 {sv.namehint = "outRawFloat_sign"} : (i33) -> i1 | |
%7 = comb.extract %io_in from 29 : (i33) -> i1 | |
%8 = comb.and bin %5, %7 {sv.namehint = "outRawFloat_isNaN"} : i1 | |
%9 = comb.xor bin %7, %true : i1 | |
%10 = comb.and bin %5, %9 {sv.namehint = "outRawFloat_isInf"} : i1 | |
%11 = comb.extract %io_in from 0 : (i33) -> i23 | |
%12 = comb.concat %c0_i3, %0 : i3, i9 | |
%13 = comb.add %12, %c1792_i12 {sv.namehint = "outRawFloat_sExp"} : i12 | |
%14 = comb.extract %io_in from 22 : (i33) -> i1 | |
%15 = comb.xor bin %14, %true : i1 | |
%16 = comb.and bin %8, %15 {sv.namehint = "invalidExc"} : i1 | |
%17 = comb.xor bin %8, %true : i1 | |
%18 = comb.and bin %6, %17 : i1 | |
%19 = comb.mux bin %2, %c0_i12, %c-1024_i12 : i12 | |
%20 = comb.xor bin %19, %c-1_i12 : i12 | |
%21 = comb.or bin %3, %10 : i1 | |
%22 = comb.xor %21, %true : i1 | |
%23 = comb.concat %c-1_i2, %22, %c-1_i9 : i2, i1, i9 | |
%24 = comb.and bin %13, %20, %23 : i12 | |
%25 = comb.mux bin %10, %c-1024_i12, %c0_i12 : i12 | |
%26 = comb.mux bin %8, %c-512_i12, %c0_i12 : i12 | |
%27 = comb.or bin %24, %25, %26 : i12 | |
%28 = comb.concat %11, %c0_i29 : i23, i29 | |
%29 = comb.mux bin %8, %c-2251799813685248_i52, %28 : i52 | |
%30 = comb.concat %18, %27, %29 {sv.namehint = "io_out"} : i1, i12, i52 | |
%31 = comb.concat %16, %c0_i4 {sv.namehint = "io_exceptionFlags"} : i1, i4 | |
hw.output %30, %31 : i65, i5 | |
} | |
hw.module private @MulAddRecFN_1(in %io_op : i2, in %io_a : i65, in %io_b : i65, in %io_c : i65, in %io_roundingMode : i2, out io_out : i65, out io_exceptionFlags : i5) { | |
%false = hw.constant false | |
%c0_i53 = hw.constant 0 : i53 | |
%mulAddRecFN_preMul.io_mulAddA, %mulAddRecFN_preMul.io_mulAddB, %mulAddRecFN_preMul.io_mulAddC, %mulAddRecFN_preMul.io_toPostMul_highExpA, %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNA, %mulAddRecFN_preMul.io_toPostMul_highExpB, %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNB, %mulAddRecFN_preMul.io_toPostMul_signProd, %mulAddRecFN_preMul.io_toPostMul_isZeroProd, %mulAddRecFN_preMul.io_toPostMul_opSignC, %mulAddRecFN_preMul.io_toPostMul_highExpC, %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNC, %mulAddRecFN_preMul.io_toPostMul_isCDominant, %mulAddRecFN_preMul.io_toPostMul_CAlignDist_0, %mulAddRecFN_preMul.io_toPostMul_CAlignDist, %mulAddRecFN_preMul.io_toPostMul_bit0AlignedNegSigC, %mulAddRecFN_preMul.io_toPostMul_highAlignedNegSigC, %mulAddRecFN_preMul.io_toPostMul_sExpSum, %mulAddRecFN_preMul.io_toPostMul_roundingMode = hw.instance "mulAddRecFN_preMul" @MulAddRecFN_preMul_1(io_op: %io_op: i2, io_a: %io_a: i65, io_b: %io_b: i65, io_c: %io_c: i65, io_roundingMode: %io_roundingMode: i2) -> (io_mulAddA: i53, io_mulAddB: i53, io_mulAddC: i106, io_toPostMul_highExpA: i3, io_toPostMul_isNaN_isQuietNaNA: i1, io_toPostMul_highExpB: i3, io_toPostMul_isNaN_isQuietNaNB: i1, io_toPostMul_signProd: i1, io_toPostMul_isZeroProd: i1, io_toPostMul_opSignC: i1, io_toPostMul_highExpC: i3, io_toPostMul_isNaN_isQuietNaNC: i1, io_toPostMul_isCDominant: i1, io_toPostMul_CAlignDist_0: i1, io_toPostMul_CAlignDist: i8, io_toPostMul_bit0AlignedNegSigC: i1, io_toPostMul_highAlignedNegSigC: i55, io_toPostMul_sExpSum: i14, io_toPostMul_roundingMode: i2) {sv.namehint = "mulAddRecFN_preMul.io_mulAddC"} | |
%mulAddRecFN_postMul.io_out, %mulAddRecFN_postMul.io_exceptionFlags = hw.instance "mulAddRecFN_postMul" @MulAddRecFN_postMul_1(io_fromPreMul_highExpA: %mulAddRecFN_preMul.io_toPostMul_highExpA: i3, io_fromPreMul_isNaN_isQuietNaNA: %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNA: i1, io_fromPreMul_highExpB: %mulAddRecFN_preMul.io_toPostMul_highExpB: i3, io_fromPreMul_isNaN_isQuietNaNB: %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNB: i1, io_fromPreMul_signProd: %mulAddRecFN_preMul.io_toPostMul_signProd: i1, io_fromPreMul_isZeroProd: %mulAddRecFN_preMul.io_toPostMul_isZeroProd: i1, io_fromPreMul_opSignC: %mulAddRecFN_preMul.io_toPostMul_opSignC: i1, io_fromPreMul_highExpC: %mulAddRecFN_preMul.io_toPostMul_highExpC: i3, io_fromPreMul_isNaN_isQuietNaNC: %mulAddRecFN_preMul.io_toPostMul_isNaN_isQuietNaNC: i1, io_fromPreMul_isCDominant: %mulAddRecFN_preMul.io_toPostMul_isCDominant: i1, io_fromPreMul_CAlignDist_0: %mulAddRecFN_preMul.io_toPostMul_CAlignDist_0: i1, io_fromPreMul_CAlignDist: %mulAddRecFN_preMul.io_toPostMul_CAlignDist: i8, io_fromPreMul_bit0AlignedNegSigC: %mulAddRecFN_preMul.io_toPostMul_bit0AlignedNegSigC: i1, io_fromPreMul_highAlignedNegSigC: %mulAddRecFN_preMul.io_toPostMul_highAlignedNegSigC: i55, io_fromPreMul_sExpSum: %mulAddRecFN_preMul.io_toPostMul_sExpSum: i14, io_fromPreMul_roundingMode: %mulAddRecFN_preMul.io_toPostMul_roundingMode: i2, io_mulAddResult: %5: i107) -> (io_out: i65, io_exceptionFlags: i5) {sv.namehint = "mulAddRecFN_postMul.io_out"} | |
%0 = comb.concat %c0_i53, %mulAddRecFN_preMul.io_mulAddA : i53, i53 | |
%1 = comb.concat %c0_i53, %mulAddRecFN_preMul.io_mulAddB : i53, i53 | |
%2 = comb.mul bin %0, %1 : i106 | |
%3 = comb.concat %false, %2 : i1, i106 | |
%4 = comb.concat %false, %mulAddRecFN_preMul.io_mulAddC : i1, i106 | |
%5 = comb.add %3, %4 {sv.namehint = "mulAddRecFN_postMul.io_mulAddResult"} : i107 | |
hw.output %mulAddRecFN_postMul.io_out, %mulAddRecFN_postMul.io_exceptionFlags : i65, i5 | |
} | |
hw.module private @DivSqrtRecF64_mulAddZ31(in %clock : !seq.clock, in %reset : i1, out io_inReady_div : i1, out io_inReady_sqrt : i1, in %io_inValid : i1, in %io_sqrtOp : i1, in %io_a : i65, in %io_b : i65, in %io_roundingMode : i2, out io_outValid_div : i1, out io_outValid_sqrt : i1, out io_out : i65, out io_exceptionFlags : i5, out io_usingMulAdd : i4, out io_latchMulAddA_0 : i1, out io_mulAddA_0 : i54, out io_latchMulAddB_0 : i1, out io_mulAddB_0 : i54, out io_mulAddC_2 : i105, in %io_mulAddResult_3 : i105) { | |
%c-174763_i19 = hw.constant -174763 : i19 | |
%c-1_i18 = hw.constant -1 : i18 | |
%c-1_i9 = hw.constant -1 : i9 | |
%c-1_i10 = hw.constant -1 : i10 | |
%c1026_i13 = hw.constant 1026 : i13 | |
%c1_i54 = hw.constant 1 : i54 | |
%c-1_i52 = hw.constant -1 : i52 | |
%c1024_i13 = hw.constant 1024 : i13 | |
%c1_i2 = hw.constant 1 : i2 | |
%c1_i7 = hw.constant 1 : i7 | |
%c1024_i21 = hw.constant 1024 : i21 | |
%c262144_i20 = hw.constant 262144 : i20 | |
%c-1_i4 = hw.constant -1 : i4 | |
%c2_i14 = hw.constant 2 : i14 | |
%c2_i4 = hw.constant 2 : i4 | |
%c3_i4 = hw.constant 3 : i4 | |
%c4_i4 = hw.constant 4 : i4 | |
%c5_i4 = hw.constant 5 : i4 | |
%c7_i4 = hw.constant 7 : i4 | |
%c1_i3 = hw.constant 1 : i3 | |
%c2_i3 = hw.constant 2 : i3 | |
%c1_i4 = hw.constant 1 : i4 | |
%c-1_i12 = hw.constant -1 : i12 | |
%c-1_i50 = hw.constant -1 : i50 | |
%c0_i59 = hw.constant 0 : i59 | |
%c-1_i13 = hw.constant -1 : i13 | |
%c-1_i53 = hw.constant -1 : i53 | |
%c-1_i54 = hw.constant -1 : i54 | |
%c-1_i46 = hw.constant -1 : i46 | |
%c0_i47 = hw.constant 0 : i47 | |
%c0_i19 = hw.constant 0 : i19 | |
%c0_i36 = hw.constant 0 : i36 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i5 = hw.constant 0 : i5 | |
%c-1_i11 = hw.constant -1 : i11 | |
%false = hw.constant false | |
%c0_i3 = hw.constant 0 : i3 | |
%c0_i4 = hw.constant 0 : i4 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c-1_i3 = hw.constant -1 : i3 | |
%true = hw.constant true | |
%c-2_i2 = hw.constant -2 : i2 | |
%c-2_i3 = hw.constant -2 : i3 | |
%c-3_i3 = hw.constant -3 : i3 | |
%c-4_i3 = hw.constant -4 : i3 | |
%c-6_i4 = hw.constant -6 : i4 | |
%c-7_i4 = hw.constant -7 : i4 | |
%c-8_i4 = hw.constant -8 : i4 | |
%c-57_i9 = hw.constant -57 : i9 | |
%c-148_i9 = hw.constant -148 : i9 | |
%c-214_i9 = hw.constant -214 : i9 | |
%c248_i9 = hw.constant 248 : i9 | |
%c210_i9 = hw.constant 210 : i9 | |
%c180_i9 = hw.constant 180 : i9 | |
%c156_i9 = hw.constant 156 : i9 | |
%c137_i9 = hw.constant 137 : i9 | |
%c-56_i9 = hw.constant -56 : i9 | |
%c193_i9 = hw.constant 193 : i9 | |
%c-189_i9 = hw.constant -189 : i9 | |
%c0_i10 = hw.constant 0 : i10 | |
%c3_i3 = hw.constant 3 : i3 | |
%c974_i13 = hw.constant 974 : i13 | |
%c974_i12 = hw.constant 974 : i12 | |
%c-1025_i12 = hw.constant -1025 : i12 | |
%c-1024_i12 = hw.constant -1024 : i12 | |
%c-512_i12 = hw.constant -512 : i12 | |
%c0_i52 = hw.constant 0 : i52 | |
%c0_i2 = hw.constant 0 : i2 | |
%c6_i4 = hw.constant 6 : i4 | |
%c0_i9 = hw.constant 0 : i9 | |
%c28_i12 = hw.constant 28 : i12 | |
%c0_i12 = hw.constant 0 : i12 | |
%c930_i12 = hw.constant 930 : i12 | |
%c1653_i12 = hw.constant 1653 : i12 | |
%c-1850_i12 = hw.constant -1850 : i12 | |
%c-1356_i12 = hw.constant -1356 : i12 | |
%c-938_i12 = hw.constant -938 : i12 | |
%c-579_i12 = hw.constant -579 : i12 | |
%c-268_i12 = hw.constant -268 : i12 | |
%c47_i10 = hw.constant 47 : i10 | |
%c479_i10 = hw.constant 479 : i10 | |
%c333_i10 = hw.constant 333 : i10 | |
%c-386_i10 = hw.constant -386 : i10 | |
%c26_i13 = hw.constant 26 : i13 | |
%c0_i13 = hw.constant 0 : i13 | |
%c3018_i13 = hw.constant 3018 : i13 | |
%c-3373_i13 = hw.constant -3373 : i13 | |
%c-1257_i13 = hw.constant -1257 : i13 | |
%c0_i20 = hw.constant 0 : i20 | |
%c0_i21 = hw.constant 0 : i21 | |
%c0_i25 = hw.constant 0 : i25 | |
%c0_i24 = hw.constant 0 : i24 | |
%c0_i15 = hw.constant 0 : i15 | |
%c0_i14 = hw.constant 0 : i14 | |
%c0_i53 = hw.constant 0 : i53 | |
%c0_i46 = hw.constant 0 : i46 | |
%c0_i51 = hw.constant 0 : i51 | |
%c0_i30 = hw.constant 0 : i30 | |
%c0_i33 = hw.constant 0 : i33 | |
%c0_i105 = hw.constant 0 : i105 | |
%c0_i104 = hw.constant 0 : i104 | |
%c0_i54 = hw.constant 0 : i54 | |
%c0_i56 = hw.constant 0 : i56 | |
%c-18446744073709551616_i65 = hw.constant -18446744073709551616 : i65 | |
%c0_i50 = hw.constant 0 : i50 | |
%c-975_i12 = hw.constant -975 : i12 | |
%valid_PA = seq.firreg %52 clock %clock reset sync %reset, %false {firrtl.random_init_start = 0 : ui64} : i1 | |
%sqrtOp_PA = seq.firreg %53 clock %clock {firrtl.random_init_start = 1 : ui64} : i1 | |
%sign_PA = seq.firreg %54 clock %clock {firrtl.random_init_start = 2 : ui64} : i1 | |
%specialCodeB_PA = seq.firreg %55 clock %clock {firrtl.random_init_start = 3 : ui64} : i3 | |
%fractB_51_PA = seq.firreg %57 clock %clock {firrtl.random_init_start = 6 : ui64} : i1 | |
%roundingMode_PA = seq.firreg %58 clock %clock {firrtl.random_init_start = 7 : ui64} : i2 | |
%specialCodeA_PA = seq.firreg %60 clock %clock {firrtl.random_init_start = 9 : ui64} : i3 | |
%fractA_51_PA = seq.firreg %62 clock %clock {firrtl.random_init_start = 12 : ui64} : i1 | |
%exp_PA = seq.firreg %72 clock %clock {firrtl.random_init_start = 13 : ui64} : i14 | |
%fractB_other_PA = seq.firreg %74 clock %clock {firrtl.random_init_start = 27 : ui64} : i51 | |
%fractA_other_PA = seq.firreg %76 clock %clock {firrtl.random_init_start = 78 : ui64} : i51 | |
%valid_PB = seq.firreg %96 clock %clock reset sync %reset, %false {firrtl.random_init_start = 129 : ui64} : i1 | |
%sqrtOp_PB = seq.firreg %98 clock %clock {firrtl.random_init_start = 130 : ui64} : i1 | |
%sign_PB = seq.firreg %100 clock %clock {firrtl.random_init_start = 131 : ui64} : i1 | |
%specialCodeA_PB = seq.firreg %102 clock %clock {firrtl.random_init_start = 132 : ui64} : i3 | |
%fractA_51_PB = seq.firreg %104 clock %clock {firrtl.random_init_start = 135 : ui64} : i1 | |
%specialCodeB_PB = seq.firreg %106 clock %clock {firrtl.random_init_start = 136 : ui64} : i3 | |
%fractB_51_PB = seq.firreg %108 clock %clock {firrtl.random_init_start = 139 : ui64} : i1 | |
%roundingMode_PB = seq.firreg %110 clock %clock {firrtl.random_init_start = 140 : ui64} : i2 | |
%exp_PB = seq.firreg %111 clock %clock {firrtl.random_init_start = 142 : ui64} : i14 | |
%fractA_0_PB = seq.firreg %113 clock %clock {firrtl.random_init_start = 156 : ui64} : i1 | |
%fractB_other_PB = seq.firreg %114 clock %clock {firrtl.random_init_start = 157 : ui64} : i51 | |
%valid_PC = seq.firreg %131 clock %clock reset sync %reset, %false {firrtl.random_init_start = 208 : ui64} : i1 | |
%sqrtOp_PC = seq.firreg %133 clock %clock {firrtl.random_init_start = 209 : ui64} : i1 | |
%sign_PC = seq.firreg %135 clock %clock {firrtl.random_init_start = 210 : ui64} : i1 | |
%specialCodeA_PC = seq.firreg %137 clock %clock {firrtl.random_init_start = 211 : ui64} : i3 | |
%fractA_51_PC = seq.firreg %139 clock %clock {firrtl.random_init_start = 214 : ui64} : i1 | |
%specialCodeB_PC = seq.firreg %141 clock %clock {firrtl.random_init_start = 215 : ui64} : i3 | |
%fractB_51_PC = seq.firreg %143 clock %clock {firrtl.random_init_start = 218 : ui64} : i1 | |
%roundingMode_PC = seq.firreg %145 clock %clock {firrtl.random_init_start = 219 : ui64} : i2 | |
%exp_PC = seq.firreg %146 clock %clock {firrtl.random_init_start = 221 : ui64} : i14 | |
%fractA_0_PC = seq.firreg %147 clock %clock {firrtl.random_init_start = 235 : ui64} : i1 | |
%fractB_other_PC = seq.firreg %148 clock %clock {firrtl.random_init_start = 236 : ui64} : i51 | |
%cycleNum_A = seq.firreg %205 clock %clock reset sync %reset, %c0_i3 {firrtl.random_init_start = 287 : ui64} : i3 | |
%cycleNum_B = seq.firreg %224 clock %clock reset sync %reset, %c0_i4 {firrtl.random_init_start = 290 : ui64} : i4 | |
%cycleNum_C = seq.firreg %251 clock %clock reset sync %reset, %c0_i3 {firrtl.random_init_start = 294 : ui64} : i3 | |
%cycleNum_E = seq.firreg %269 clock %clock reset sync %reset, %c0_i3 {firrtl.random_init_start = 297 : ui64} : i3 | |
%fractR0_A = seq.firreg %435 clock %clock {firrtl.random_init_start = 300 : ui64} : i9 | |
%hiSqrR0_A_sqrt = seq.firreg %437 clock %clock {firrtl.random_init_start = 309 : ui64} : i10 | |
%partNegSigma0_A = seq.firreg %443 clock %clock {firrtl.random_init_start = 319 : ui64} : i21 | |
%nextMulAdd9A_A = seq.firreg %456 clock %clock {firrtl.random_init_start = 340 : ui64} : i9 | |
%nextMulAdd9B_A = seq.firreg %466 clock %clock {firrtl.random_init_start = 349 : ui64} : i9 | |
%ER1_B_sqrt = seq.firreg %467 clock %clock {firrtl.random_init_start = 358 : ui64} : i17 | |
%ESqrR1_B_sqrt = seq.firreg %582 clock %clock {firrtl.random_init_start = 375 : ui64} : i32 | |
%sigX1_B = seq.firreg %583 clock %clock {firrtl.random_init_start = 407 : ui64} : i58 | |
%sqrSigma1_C = seq.firreg %584 clock %clock {firrtl.random_init_start = 465 : ui64} : i33 | |
%sigXN_C = seq.firreg %586 clock %clock {firrtl.random_init_start = 498 : ui64} : i58 | |
%u_C_sqrt = seq.firreg %588 clock %clock {firrtl.random_init_start = 556 : ui64} : i31 | |
%E_E_div = seq.firreg %589 clock %clock {firrtl.random_init_start = 587 : ui64} : i1 | |
%sigT_E = seq.firreg %591 clock %clock {firrtl.random_init_start = 588 : ui64} : i53 | |
%extraT_E = seq.firreg %593 clock %clock {firrtl.random_init_start = 641 : ui64} : i1 | |
%isNegRemT_E = seq.firreg %597 clock %clock {firrtl.random_init_start = 642 : ui64} : i1 | |
%isZeroRemT_E = seq.firreg %604 clock %clock {firrtl.random_init_start = 643 : ui64} : i1 | |
%0 = comb.xor bin %228, %true : i1 | |
%1 = comb.xor bin %240, %true : i1 | |
%2 = comb.xor bin %241, %true : i1 | |
%3 = comb.xor bin %242, %true : i1 | |
%4 = comb.xor bin %232, %true : i1 | |
%5 = comb.xor bin %233, %true : i1 | |
%6 = comb.xor bin %245, %true : i1 | |
%7 = comb.xor bin %253, %true : i1 | |
%8 = comb.xor bin %254, %true : i1 | |
%9 = comb.and bin %92, %0, %1, %2, %3, %4, %5, %6, %7, %8 {sv.namehint = "io_inReady_div"} : i1 | |
%10 = comb.xor bin %238, %true : i1 | |
%11 = comb.and bin %92, %1, %2, %3, %10, %6 {sv.namehint = "io_inReady_sqrt"} : i1 | |
%12 = comb.xor bin %io_sqrtOp, %true : i1 | |
%13 = comb.and bin %9, %io_inValid, %12 {sv.namehint = "cyc_S_div"} : i1 | |
%14 = comb.and bin %11, %io_inValid, %io_sqrtOp {sv.namehint = "cyc_S_sqrt"} : i1 | |
%15 = comb.or bin %13, %14 {sv.namehint = "cyc_S"} : i1 | |
%16 = comb.extract %io_a from 64 {sv.namehint = "signA_S"} : (i65) -> i1 | |
%17 = comb.extract %io_a from 52 {sv.namehint = "expA_S"} : (i65) -> i12 | |
%18 = comb.extract %io_a from 61 {sv.namehint = "specialCodeA_S"} : (i65) -> i3 | |
%19 = comb.icmp bin ne %18, %c0_i3 : i3 | |
%20 = comb.extract %io_a from 62 : (i65) -> i2 | |
%21 = comb.extract %io_b from 64 {sv.namehint = "signB_S"} : (i65) -> i1 | |
%22 = comb.extract %io_b from 52 {sv.namehint = "expB_S"} : (i65) -> i12 | |
%23 = comb.extract %io_b from 61 {sv.namehint = "specialCodeB_S"} : (i65) -> i3 | |
%24 = comb.icmp bin ne %23, %c0_i3 : i3 | |
%25 = comb.extract %io_b from 62 : (i65) -> i2 | |
%26 = comb.xor %io_sqrtOp, %true : i1 | |
%27 = comb.and %26, %16 : i1 | |
%28 = comb.xor %27, %21 {sv.namehint = "sign_S"} : i1 | |
%29 = comb.icmp bin ne %20, %c-1_i2 : i2 | |
%30 = comb.icmp bin ne %25, %c-1_i2 : i2 | |
%31 = comb.and bin %29, %30, %19, %24 {sv.namehint = "normalCase_S_div"} : i1 | |
%32 = comb.xor bin %21, %true : i1 | |
%33 = comb.and bin %30, %24, %32 {sv.namehint = "normalCase_S_sqrt"} : i1 | |
%34 = comb.mux bin %io_sqrtOp, %33, %31 {sv.namehint = "normalCase_S"} : i1 | |
%35 = comb.and bin %13, %31 {sv.namehint = "cyc_A4_div"} : i1 | |
%36 = comb.and bin %14, %33 {sv.namehint = "cyc_A7_sqrt"} : i1 | |
%37 = comb.or bin %35, %36 {sv.namehint = "entering_PA_normalCase"} : i1 | |
%38 = comb.xor bin %127, %true : i1 | |
%39 = comb.or bin %valid_PA, %38 : i1 | |
%40 = comb.and bin %15, %39 : i1 | |
%41 = comb.or bin %37, %40 {sv.namehint = "entering_PA"} : i1 | |
%42 = comb.xor bin %34, %true : i1 | |
%43 = comb.xor bin %valid_PA, %true : i1 | |
%44 = comb.and bin %15, %42, %43 : i1 | |
%45 = comb.xor bin %valid_PB, %true : i1 | |
%46 = comb.xor bin %193, %true : i1 | |
%47 = comb.and bin %45, %46 : i1 | |
%48 = comb.or bin %126, %47 : i1 | |
%49 = comb.and bin %44, %48 {sv.namehint = "entering_PB_S"} : i1 | |
%50 = comb.and bin %44, %45, %193 {sv.namehint = "entering_PC_S"} : i1 | |
%51 = comb.or bin %41, %91 : i1 | |
%52 = comb.mux bin %51, %41, %valid_PA : i1 | |
%53 = comb.mux bin %41, %io_sqrtOp, %sqrtOp_PA : i1 | |
%54 = comb.mux bin %41, %28, %sign_PA : i1 | |
%55 = comb.mux bin %41, %23, %specialCodeB_PA : i3 | |
%56 = comb.extract %io_b from 51 : (i65) -> i1 | |
%57 = comb.mux bin %41, %56, %fractB_51_PA : i1 | |
%58 = comb.mux bin %41, %io_roundingMode, %roundingMode_PA : i2 | |
%59 = comb.and bin %41, %12 : i1 | |
%60 = comb.mux bin %59, %18, %specialCodeA_PA : i3 | |
%61 = comb.extract %io_a from 51 : (i65) -> i1 | |
%62 = comb.mux bin %59, %61, %fractA_51_PA : i1 | |
%63 = comb.extract %io_b from 63 : (i65) -> i1 | |
%64 = comb.replicate %63 : (i1) -> i3 | |
%65 = comb.extract %io_b from 52 : (i65) -> i11 | |
%66 = comb.xor bin %65, %c-1_i11 : i11 | |
%67 = comb.concat %c0_i2, %17 : i2, i12 | |
%68 = comb.concat %64, %66 : i3, i11 | |
%69 = comb.add %67, %68 : i14 | |
%70 = comb.concat %c0_i2, %22 : i2, i12 | |
%71 = comb.mux bin %io_sqrtOp, %70, %69 : i14 | |
%72 = comb.mux bin %37, %71, %exp_PA : i14 | |
%73 = comb.extract %io_b from 0 : (i65) -> i51 | |
%74 = comb.mux bin %37, %73, %fractB_other_PA : i51 | |
%75 = comb.extract %io_a from 0 : (i65) -> i51 | |
%76 = comb.mux bin %35, %75, %fractA_other_PA : i51 | |
%77 = comb.icmp bin ne %specialCodeA_PA, %c0_i3 : i3 | |
%78 = comb.extract %specialCodeA_PA from 1 : (i3) -> i2 | |
%79 = comb.concat %true, %fractA_51_PA, %fractA_other_PA {sv.namehint = "sigA_PA"} : i1, i1, i51 | |
%80 = comb.icmp bin ne %specialCodeB_PA, %c0_i3 : i3 | |
%81 = comb.extract %specialCodeB_PA from 1 : (i3) -> i2 | |
%82 = comb.concat %true, %fractB_51_PA, %fractB_other_PA {sv.namehint = "sigB_PA"} : i1, i1, i51 | |
%83 = comb.icmp bin ne %81, %c-1_i2 : i2 | |
%84 = comb.xor bin %sign_PA, %true : i1 | |
%85 = comb.and bin %83, %80, %84 : i1 | |
%86 = comb.icmp bin ne %78, %c-1_i2 : i2 | |
%87 = comb.and bin %86, %83, %77, %80 : i1 | |
%88 = comb.mux bin %sqrtOp_PA, %85, %87 {sv.namehint = "normalCase_PA"} : i1 | |
%89 = comb.or bin %236, %228 {sv.namehint = "valid_normalCase_leaving_PA"} : i1 | |
%90 = comb.mux bin %88, %89, %127 {sv.namehint = "valid_leaving_PA"} : i1 | |
%91 = comb.and bin %valid_PA, %90 {sv.namehint = "leaving_PA"} : i1 | |
%92 = comb.or bin %43, %90 {sv.namehint = "ready_PA"} : i1 | |
%93 = comb.and bin %valid_PA, %88, %89 {sv.namehint = "entering_PB_normalCase"} : i1 | |
%94 = comb.or bin %49, %91 {sv.namehint = "entering_PB"} : i1 | |
%95 = comb.or bin %94, %126 : i1 | |
%96 = comb.mux bin %95, %94, %valid_PB : i1 | |
%97 = comb.mux bin %valid_PA, %sqrtOp_PA, %io_sqrtOp : i1 | |
%98 = comb.mux bin %94, %97, %sqrtOp_PB : i1 | |
%99 = comb.mux bin %valid_PA, %sign_PA, %28 : i1 | |
%100 = comb.mux bin %94, %99, %sign_PB : i1 | |
%101 = comb.mux bin %valid_PA, %specialCodeA_PA, %18 : i3 | |
%102 = comb.mux bin %94, %101, %specialCodeA_PB : i3 | |
%103 = comb.mux bin %valid_PA, %fractA_51_PA, %61 : i1 | |
%104 = comb.mux bin %94, %103, %fractA_51_PB : i1 | |
%105 = comb.mux bin %valid_PA, %specialCodeB_PA, %23 : i3 | |
%106 = comb.mux bin %94, %105, %specialCodeB_PB : i3 | |
%107 = comb.mux bin %valid_PA, %fractB_51_PA, %56 : i1 | |
%108 = comb.mux bin %94, %107, %fractB_51_PB : i1 | |
%109 = comb.mux bin %valid_PA, %roundingMode_PA, %io_roundingMode : i2 | |
%110 = comb.mux bin %94, %109, %roundingMode_PB : i2 | |
%111 = comb.mux bin %93, %exp_PA, %exp_PB : i14 | |
%112 = comb.extract %fractA_other_PA from 0 : (i51) -> i1 | |
%113 = comb.mux bin %93, %112, %fractA_0_PB : i1 | |
%114 = comb.mux bin %93, %fractB_other_PA, %fractB_other_PB : i51 | |
%115 = comb.icmp bin ne %specialCodeA_PB, %c0_i3 : i3 | |
%116 = comb.extract %specialCodeA_PB from 1 : (i3) -> i2 | |
%117 = comb.icmp bin ne %specialCodeB_PB, %c0_i3 : i3 | |
%118 = comb.extract %specialCodeB_PB from 1 : (i3) -> i2 | |
%119 = comb.icmp bin ne %118, %c-1_i2 : i2 | |
%120 = comb.xor bin %sign_PB, %true : i1 | |
%121 = comb.and bin %119, %117, %120 : i1 | |
%122 = comb.icmp bin ne %116, %c-1_i2 : i2 | |
%123 = comb.and bin %122, %119, %115, %117 : i1 | |
%124 = comb.mux bin %sqrtOp_PB, %121, %123 {sv.namehint = "normalCase_PB"} : i1 | |
%125 = comb.mux bin %124, %255, %193 {sv.namehint = "valid_leaving_PB"} : i1 | |
%126 = comb.and bin %valid_PB, %125 {sv.namehint = "leaving_PB"} : i1 | |
%127 = comb.or bin %45, %125 {sv.namehint = "ready_PB"} : i1 | |
%128 = comb.and bin %valid_PB, %124, %255 {sv.namehint = "entering_PC_normalCase"} : i1 | |
%129 = comb.or bin %50, %126 {sv.namehint = "entering_PC"} : i1 | |
%130 = comb.or bin %129, %191 : i1 | |
%131 = comb.mux bin %130, %129, %valid_PC : i1 | |
%132 = comb.mux bin %valid_PB, %sqrtOp_PB, %io_sqrtOp : i1 | |
%133 = comb.mux bin %129, %132, %sqrtOp_PC : i1 | |
%134 = comb.mux bin %valid_PB, %sign_PB, %28 : i1 | |
%135 = comb.mux bin %129, %134, %sign_PC : i1 | |
%136 = comb.mux bin %valid_PB, %specialCodeA_PB, %18 : i3 | |
%137 = comb.mux bin %129, %136, %specialCodeA_PC : i3 | |
%138 = comb.mux bin %valid_PB, %fractA_51_PB, %61 : i1 | |
%139 = comb.mux bin %129, %138, %fractA_51_PC : i1 | |
%140 = comb.mux bin %valid_PB, %specialCodeB_PB, %23 : i3 | |
%141 = comb.mux bin %129, %140, %specialCodeB_PC : i3 | |
%142 = comb.mux bin %valid_PB, %fractB_51_PB, %56 : i1 | |
%143 = comb.mux bin %129, %142, %fractB_51_PC : i1 | |
%144 = comb.mux bin %valid_PB, %roundingMode_PB, %io_roundingMode : i2 | |
%145 = comb.mux bin %129, %144, %roundingMode_PC : i2 | |
%146 = comb.mux bin %128, %exp_PB, %exp_PC : i14 | |
%147 = comb.mux bin %128, %fractA_0_PB, %fractA_0_PC : i1 | |
%148 = comb.mux bin %128, %fractB_other_PB, %fractB_other_PC : i51 | |
%149 = comb.icmp bin ne %specialCodeA_PC, %c0_i3 : i3 | |
%150 = comb.xor bin %149, %true {sv.namehint = "isZeroA_PC"} : i1 | |
%151 = comb.extract %specialCodeA_PC from 1 : (i3) -> i2 | |
%152 = comb.icmp bin eq %151, %c-1_i2 {sv.namehint = "isSpecialA_PC"} : i2 | |
%153 = comb.extract %specialCodeA_PC from 0 : (i3) -> i1 | |
%154 = comb.xor bin %153, %true : i1 | |
%155 = comb.and bin %152, %154 {sv.namehint = "isInfA_PC"} : i1 | |
%156 = comb.and bin %152, %153 {sv.namehint = "isNaNA_PC"} : i1 | |
%157 = comb.xor bin %fractA_51_PC, %true : i1 | |
%158 = comb.icmp bin ne %specialCodeB_PC, %c0_i3 : i3 | |
%159 = comb.xor bin %158, %true {sv.namehint = "isZeroB_PC"} : i1 | |
%160 = comb.extract %specialCodeB_PC from 1 : (i3) -> i2 | |
%161 = comb.icmp bin eq %160, %c-1_i2 {sv.namehint = "isSpecialB_PC"} : i2 | |
%162 = comb.extract %specialCodeB_PC from 0 : (i3) -> i1 | |
%163 = comb.xor bin %162, %true : i1 | |
%164 = comb.and bin %161, %163 {sv.namehint = "isInfB_PC"} : i1 | |
%165 = comb.and bin %161, %162 {sv.namehint = "isNaNB_PC"} : i1 | |
%166 = comb.xor bin %fractB_51_PC, %true : i1 | |
%167 = comb.and bin %165, %166 {sv.namehint = "isSigNaNB_PC"} : i1 | |
%168 = comb.concat %true, %fractB_51_PC, %fractB_other_PC {sv.namehint = "sigB_PC"} : i1, i1, i51 | |
%169 = comb.xor bin %161, %true : i1 | |
%170 = comb.xor bin %sign_PC, %true : i1 | |
%171 = comb.and bin %169, %158, %170 : i1 | |
%172 = comb.xor bin %152, %true : i1 | |
%173 = comb.and bin %172, %169, %149, %158 : i1 | |
%174 = comb.mux bin %sqrtOp_PC, %171, %173 {sv.namehint = "normalCase_PC"} : i1 | |
%175 = comb.add %exp_PC, %c2_i14 {sv.namehint = "expP2_PC"} : i14 | |
%176 = comb.extract %exp_PC from 0 : (i14) -> i1 | |
%177 = comb.extract %175 from 1 : (i14) -> i13 | |
%178 = comb.concat %177, %false : i13, i1 | |
%179 = comb.extract %exp_PC from 1 : (i14) -> i13 | |
%180 = comb.concat %179, %true : i13, i1 | |
%181 = comb.mux bin %176, %178, %180 {sv.namehint = "expP1_PC"} : i14 | |
%182 = comb.icmp bin ne %roundingMode_PC, %c0_i2 : i2 | |
%183 = comb.xor bin %182, %true {sv.namehint = "roundingMode_near_even_PC"} : i1 | |
%184 = comb.icmp bin eq %roundingMode_PC, %c-2_i2 {sv.namehint = "roundingMode_min_PC"} : i2 | |
%185 = comb.icmp bin eq %roundingMode_PC, %c-1_i2 {sv.namehint = "roundingMode_max_PC"} : i2 | |
%186 = comb.mux bin %sign_PC, %184, %185 {sv.namehint = "roundMagUp_PC"} : i1 | |
%187 = comb.or bin %183, %186 {sv.namehint = "overflowY_roundMagUp_PC"} : i1 | |
%188 = comb.xor bin %186, %true : i1 | |
%189 = comb.xor bin %174, %true : i1 | |
%190 = comb.or bin %189, %272 {sv.namehint = "valid_leaving_PC"} : i1 | |
%191 = comb.and bin %valid_PC, %190 {sv.namehint = "leaving_PC"} : i1 | |
%192 = comb.xor bin %valid_PC, %true : i1 | |
%193 = comb.or bin %192, %190 {sv.namehint = "ready_PC"} : i1 | |
%194 = comb.xor bin %sqrtOp_PC, %true : i1 | |
%195 = comb.and bin %191, %194 {sv.namehint = "io_outValid_div"} : i1 | |
%196 = comb.and bin %191, %sqrtOp_PC {sv.namehint = "io_outValid_sqrt"} : i1 | |
%197 = comb.concat %37, %cycleNum_A : i1, i3 | |
%198 = comb.icmp bin ne %197, %c0_i4 : i4 | |
%199 = comb.replicate %35 : (i1) -> i2 | |
%200 = comb.mux bin %36, %c-2_i3, %c0_i3 : i3 | |
%201 = comb.concat %false, %199 : i1, i2 | |
%202 = comb.add %cycleNum_A, %c-1_i3 : i3 | |
%203 = comb.mux bin %37, %c0_i3, %202 : i3 | |
%204 = comb.or bin %201, %200, %203 : i3 | |
%205 = comb.mux bin %198, %204, %cycleNum_A : i3 | |
%206 = comb.icmp bin eq %cycleNum_A, %c-2_i3 {sv.namehint = "cyc_A6_sqrt"} : i3 | |
%207 = comb.icmp bin eq %cycleNum_A, %c-3_i3 {sv.namehint = "cyc_A5_sqrt"} : i3 | |
%208 = comb.icmp bin eq %cycleNum_A, %c-4_i3 {sv.namehint = "cyc_A4_sqrt"} : i3 | |
%209 = comb.or bin %208, %35 {sv.namehint = "cyc_A4"} : i1 | |
%210 = comb.icmp bin eq %cycleNum_A, %c3_i3 {sv.namehint = "cyc_A3"} : i3 | |
%211 = comb.icmp bin eq %cycleNum_A, %c2_i3 {sv.namehint = "cyc_A2"} : i3 | |
%212 = comb.icmp bin eq %cycleNum_A, %c1_i3 {sv.namehint = "cyc_A1"} : i3 | |
%213 = comb.xor bin %sqrtOp_PA, %true : i1 | |
%214 = comb.and bin %210, %213 {sv.namehint = "cyc_A3_div"} : i1 | |
%215 = comb.and bin %211, %213 {sv.namehint = "cyc_A2_div"} : i1 | |
%216 = comb.and bin %212, %213 {sv.namehint = "cyc_A1_div"} : i1 | |
%217 = comb.and bin %210, %sqrtOp_PA {sv.namehint = "cyc_A3_sqrt"} : i1 | |
%218 = comb.and bin %212, %sqrtOp_PA {sv.namehint = "cyc_A1_sqrt"} : i1 | |
%219 = comb.concat %212, %cycleNum_B : i1, i4 | |
%220 = comb.icmp bin ne %219, %c0_i5 : i5 | |
%221 = comb.mux bin %sqrtOp_PA, %c-6_i4, %c6_i4 : i4 | |
%222 = comb.add %cycleNum_B, %c-1_i4 : i4 | |
%223 = comb.mux bin %212, %221, %222 : i4 | |
%224 = comb.mux bin %220, %223, %cycleNum_B : i4 | |
%225 = comb.icmp bin eq %cycleNum_B, %c-6_i4 {sv.namehint = "cyc_B10_sqrt"} : i4 | |
%226 = comb.icmp bin eq %cycleNum_B, %c-7_i4 {sv.namehint = "cyc_B9_sqrt"} : i4 | |
%227 = comb.icmp bin eq %cycleNum_B, %c-8_i4 {sv.namehint = "cyc_B8_sqrt"} : i4 | |
%228 = comb.icmp bin eq %cycleNum_B, %c7_i4 {sv.namehint = "cyc_B7_sqrt"} : i4 | |
%229 = comb.icmp bin eq %cycleNum_B, %c6_i4 {sv.namehint = "cyc_B6"} : i4 | |
%230 = comb.icmp bin eq %cycleNum_B, %c5_i4 {sv.namehint = "cyc_B5"} : i4 | |
%231 = comb.icmp bin eq %cycleNum_B, %c4_i4 {sv.namehint = "cyc_B4"} : i4 | |
%232 = comb.icmp bin eq %cycleNum_B, %c3_i4 {sv.namehint = "cyc_B3"} : i4 | |
%233 = comb.icmp bin eq %cycleNum_B, %c2_i4 {sv.namehint = "cyc_B2"} : i4 | |
%234 = comb.icmp bin eq %cycleNum_B, %c1_i4 {sv.namehint = "cyc_B1"} : i4 | |
%235 = comb.and bin %229, %valid_PA, %213 {sv.namehint = "cyc_B6_div"} : i1 | |
%236 = comb.and bin %231, %valid_PA, %213 {sv.namehint = "cyc_B4_div"} : i1 | |
%237 = comb.xor bin %sqrtOp_PB, %true : i1 | |
%238 = comb.and bin %233, %237 {sv.namehint = "cyc_B2_div"} : i1 | |
%239 = comb.and bin %234, %237 {sv.namehint = "cyc_B1_div"} : i1 | |
%240 = comb.and bin %229, %valid_PB, %sqrtOp_PB {sv.namehint = "cyc_B6_sqrt"} : i1 | |
%241 = comb.and bin %230, %valid_PB, %sqrtOp_PB {sv.namehint = "cyc_B5_sqrt"} : i1 | |
%242 = comb.and bin %231, %valid_PB, %sqrtOp_PB {sv.namehint = "cyc_B4_sqrt"} : i1 | |
%243 = comb.and bin %232, %sqrtOp_PB {sv.namehint = "cyc_B3_sqrt"} : i1 | |
%244 = comb.and bin %233, %sqrtOp_PB {sv.namehint = "cyc_B2_sqrt"} : i1 | |
%245 = comb.and bin %234, %sqrtOp_PB {sv.namehint = "cyc_B1_sqrt"} : i1 | |
%246 = comb.concat %234, %cycleNum_C : i1, i3 | |
%247 = comb.icmp bin ne %246, %c0_i4 : i4 | |
%248 = comb.mux bin %sqrtOp_PB, %c-2_i3, %c-3_i3 : i3 | |
%249 = comb.add %cycleNum_C, %c-1_i3 : i3 | |
%250 = comb.mux bin %234, %248, %249 : i3 | |
%251 = comb.mux bin %247, %250, %cycleNum_C : i3 | |
%252 = comb.icmp bin eq %cycleNum_C, %c-2_i3 {sv.namehint = "cyc_C6_sqrt"} : i3 | |
%253 = comb.icmp bin eq %cycleNum_C, %c-3_i3 {sv.namehint = "cyc_C5"} : i3 | |
%254 = comb.icmp bin eq %cycleNum_C, %c-4_i3 {sv.namehint = "cyc_C4"} : i3 | |
%255 = comb.icmp bin eq %cycleNum_C, %c3_i3 {sv.namehint = "cyc_C3"} : i3 | |
%256 = comb.icmp bin eq %cycleNum_C, %c2_i3 {sv.namehint = "cyc_C2"} : i3 | |
%257 = comb.icmp bin eq %cycleNum_C, %c1_i3 {sv.namehint = "cyc_C1"} : i3 | |
%258 = comb.and bin %253, %237 {sv.namehint = "cyc_C5_div"} : i1 | |
%259 = comb.and bin %254, %237 {sv.namehint = "cyc_C4_div"} : i1 | |
%260 = comb.and bin %257, %194 {sv.namehint = "cyc_C1_div"} : i1 | |
%261 = comb.and bin %253, %sqrtOp_PB {sv.namehint = "cyc_C5_sqrt"} : i1 | |
%262 = comb.and bin %254, %sqrtOp_PB {sv.namehint = "cyc_C4_sqrt"} : i1 | |
%263 = comb.and bin %255, %sqrtOp_PB {sv.namehint = "cyc_C3_sqrt"} : i1 | |
%264 = comb.and bin %257, %sqrtOp_PC {sv.namehint = "cyc_C1_sqrt"} : i1 | |
%265 = comb.concat %257, %cycleNum_E : i1, i3 | |
%266 = comb.icmp bin ne %265, %c0_i4 : i4 | |
%267 = comb.add %cycleNum_E, %c-1_i3 : i3 | |
%268 = comb.mux bin %257, %c-4_i3, %267 : i3 | |
%269 = comb.mux bin %266, %268, %cycleNum_E : i3 | |
%270 = comb.icmp bin eq %cycleNum_E, %c3_i3 {sv.namehint = "cyc_E3"} : i3 | |
%271 = comb.icmp bin eq %cycleNum_E, %c2_i3 {sv.namehint = "cyc_E2"} : i3 | |
%272 = comb.icmp bin eq %cycleNum_E, %c1_i3 {sv.namehint = "cyc_E1"} : i3 | |
%273 = comb.and bin %270, %sqrtOp_PC {sv.namehint = "cyc_E3_sqrt"} : i1 | |
%274 = comb.extract %io_b from 35 : (i65) -> i14 | |
%275 = comb.mux %35, %274, %c0_i14 {sv.namehint = "zFractB_A4_div"} : i14 | |
%276 = comb.extract %io_b from 49 : (i65) -> i3 | |
%277 = comb.icmp bin eq %276, %c0_i3 : i3 | |
%278 = comb.and bin %35, %277 {sv.namehint = "zLinPiece_0_A4_div"} : i1 | |
%279 = comb.icmp bin eq %276, %c1_i3 : i3 | |
%280 = comb.and bin %35, %279 {sv.namehint = "zLinPiece_1_A4_div"} : i1 | |
%281 = comb.icmp bin eq %276, %c2_i3 : i3 | |
%282 = comb.and bin %35, %281 {sv.namehint = "zLinPiece_2_A4_div"} : i1 | |
%283 = comb.icmp bin eq %276, %c3_i3 : i3 | |
%284 = comb.and bin %35, %283 {sv.namehint = "zLinPiece_3_A4_div"} : i1 | |
%285 = comb.icmp bin eq %276, %c-4_i3 : i3 | |
%286 = comb.and bin %35, %285 {sv.namehint = "zLinPiece_4_A4_div"} : i1 | |
%287 = comb.icmp bin eq %276, %c-3_i3 : i3 | |
%288 = comb.and bin %35, %287 {sv.namehint = "zLinPiece_5_A4_div"} : i1 | |
%289 = comb.icmp bin eq %276, %c-2_i3 : i3 | |
%290 = comb.and bin %35, %289 {sv.namehint = "zLinPiece_6_A4_div"} : i1 | |
%291 = comb.icmp bin eq %276, %c-1_i3 : i3 | |
%292 = comb.and bin %35, %291 {sv.namehint = "zLinPiece_7_A4_div"} : i1 | |
%293 = comb.mux bin %278, %c-57_i9, %c0_i9 : i9 | |
%294 = comb.mux bin %280, %c-148_i9, %c0_i9 : i9 | |
%295 = comb.mux bin %282, %c-214_i9, %c0_i9 : i9 | |
%296 = comb.mux bin %284, %c248_i9, %c0_i9 : i9 | |
%297 = comb.mux bin %286, %c210_i9, %c0_i9 : i9 | |
%298 = comb.mux bin %288, %c180_i9, %c0_i9 : i9 | |
%299 = comb.mux bin %290, %c156_i9, %c0_i9 : i9 | |
%300 = comb.mux bin %292, %c137_i9, %c0_i9 : i9 | |
%301 = comb.mux bin %278, %c28_i12, %c0_i12 : i12 | |
%302 = comb.mux bin %280, %c930_i12, %c0_i12 : i12 | |
%303 = comb.mux bin %282, %c1653_i12, %c0_i12 : i12 | |
%304 = comb.mux bin %284, %c-1850_i12, %c0_i12 : i12 | |
%305 = comb.mux bin %286, %c-1356_i12, %c0_i12 : i12 | |
%306 = comb.mux bin %288, %c-938_i12, %c0_i12 : i12 | |
%307 = comb.mux bin %290, %c-579_i12, %c0_i12 : i12 | |
%308 = comb.mux bin %292, %c-268_i12, %c0_i12 : i12 | |
%309 = comb.extract %io_b from 42 : (i65) -> i9 | |
%310 = comb.mux %36, %309, %c0_i9 {sv.namehint = "zFractB_A7_sqrt"} : i9 | |
%311 = comb.extract %io_b from 52 : (i65) -> i1 | |
%312 = comb.xor bin %311, %true : i1 | |
%313 = comb.and bin %36, %312 : i1 | |
%314 = comb.xor bin %56, %true : i1 | |
%315 = comb.and bin %313, %314 {sv.namehint = "zQuadPiece_0_A7_sqrt"} : i1 | |
%316 = comb.and bin %313, %56 {sv.namehint = "zQuadPiece_1_A7_sqrt"} : i1 | |
%317 = comb.and bin %36, %311 : i1 | |
%318 = comb.and bin %317, %314 {sv.namehint = "zQuadPiece_2_A7_sqrt"} : i1 | |
%319 = comb.and bin %317, %56 {sv.namehint = "zQuadPiece_3_A7_sqrt"} : i1 | |
%320 = comb.mux bin %315, %c-56_i9, %c0_i9 : i9 | |
%321 = comb.mux bin %316, %c193_i9, %c0_i9 : i9 | |
%322 = comb.mux bin %318, %c-189_i9, %c0_i9 : i9 | |
%323 = comb.mux bin %319, %c137_i9, %c0_i9 : i9 | |
%324 = comb.mux bin %315, %c47_i10, %c0_i10 : i10 | |
%325 = comb.mux bin %316, %c479_i10, %c0_i10 : i10 | |
%326 = comb.mux bin %318, %c333_i10, %c0_i10 : i10 | |
%327 = comb.mux bin %319, %c-386_i10, %c0_i10 : i10 | |
%328 = comb.or bin %324, %325, %326, %327 {sv.namehint = "zComplK1_A7_sqrt"} : i10 | |
%329 = comb.extract %exp_PA from 0 : (i14) -> i1 | |
%330 = comb.xor bin %329, %true : i1 | |
%331 = comb.and bin %206, %330 : i1 | |
%332 = comb.xor bin %fractB_51_PA, %true : i1 | |
%333 = comb.and bin %331, %332 {sv.namehint = "zQuadPiece_0_A6_sqrt"} : i1 | |
%334 = comb.and bin %331, %fractB_51_PA {sv.namehint = "zQuadPiece_1_A6_sqrt"} : i1 | |
%335 = comb.and bin %206, %329 : i1 | |
%336 = comb.and bin %335, %332 {sv.namehint = "zQuadPiece_2_A6_sqrt"} : i1 | |
%337 = comb.and bin %335, %fractB_51_PA {sv.namehint = "zQuadPiece_3_A6_sqrt"} : i1 | |
%338 = comb.mux bin %333, %c26_i13, %c0_i13 : i13 | |
%339 = comb.mux bin %334, %c3018_i13, %c0_i13 : i13 | |
%340 = comb.mux bin %336, %c-3373_i13, %c0_i13 : i13 | |
%341 = comb.mux bin %337, %c-1257_i13, %c0_i13 : i13 | |
%342 = comb.or bin %338, %339, %340, %341 {sv.namehint = "zComplFractK0_A6_sqrt"} : i13 | |
%343 = comb.extract %275 from 5 : (i14) -> i9 | |
%344 = comb.mux bin %15, %c0_i9, %nextMulAdd9A_A : i9 | |
%345 = comb.or bin %343, %320, %321, %322, %323, %344 {sv.namehint = "mulAdd9A_A"} : i9 | |
%346 = comb.mux bin %15, %c0_i9, %nextMulAdd9B_A : i9 | |
%347 = comb.or bin %293, %294, %295, %296, %297, %298, %299, %300, %310, %346 {sv.namehint = "mulAdd9B_A"} : i9 | |
%348 = comb.replicate %36 : (i1) -> i10 | |
%349 = comb.concat %328, %348 : i10, i10 | |
%350 = comb.replicate %206 : (i1) -> i6 | |
%351 = comb.concat %206, %342, %350 : i1, i13, i6 | |
%352 = comb.or bin %349, %351 : i20 | |
%353 = comb.replicate %35 : (i1) -> i8 | |
%354 = comb.extract %352 from 8 : (i20) -> i12 | |
%355 = comb.or %354, %301, %302, %303, %304, %305, %306, %307, %308 : i12 | |
%356 = comb.extract %352 from 0 : (i20) -> i8 | |
%357 = comb.or %356, %353 : i8 | |
%358 = comb.concat %false, %fractR0_A, %c0_i10 : i1, i9, i10 | |
%359 = comb.add %358, %c262144_i20 : i20 | |
%360 = comb.mux bin %207, %359, %c0_i20 : i20 | |
%361 = comb.concat %355, %357 : i12, i8 | |
%362 = comb.or bin %361, %360 : i20 | |
%363 = comb.extract %hiSqrR0_A_sqrt from 9 : (i10) -> i1 | |
%364 = comb.xor bin %363, %true : i1 | |
%365 = comb.and bin %208, %364 : i1 | |
%366 = comb.concat %365, %c0_i10 : i1, i10 | |
%367 = comb.extract %362 from 11 : (i20) -> i9 | |
%368 = comb.extract %362 from 0 : (i20) -> i11 | |
%369 = comb.or bin %368, %366 : i11 | |
%370 = comb.concat %35, %367, %369 : i1, i9, i11 | |
%371 = comb.and bin %208, %363 : i1 | |
%372 = comb.or bin %371, %214 : i1 | |
%373 = comb.extract %fractB_other_PA from 26 : (i51) -> i21 | |
%374 = comb.add %373, %c1024_i21 : i21 | |
%375 = comb.mux bin %372, %374, %c0_i21 : i21 | |
%376 = comb.or bin %217, %211 : i1 | |
%377 = comb.mux bin %376, %partNegSigma0_A, %c0_i21 : i21 | |
%378 = comb.or bin %370, %375, %377 : i21 | |
%379 = comb.concat %fractR0_A, %c0_i16 : i9, i16 | |
%380 = comb.mux bin %218, %379, %c0_i25 : i25 | |
%381 = comb.concat %c0_i4, %378 : i4, i21 | |
%382 = comb.or bin %381, %380 : i25 | |
%383 = comb.concat %fractR0_A, %c0_i15 : i9, i15 | |
%384 = comb.mux bin %216, %383, %c0_i24 : i24 | |
%385 = comb.extract %382 from 24 : (i25) -> i1 | |
%386 = comb.extract %382 from 0 : (i25) -> i24 | |
%387 = comb.or bin %386, %384 : i24 | |
%388 = comb.concat %c0_i9, %345 : i9, i9 | |
%389 = comb.concat %c0_i9, %347 : i9, i9 | |
%390 = comb.mul bin %388, %389 : i18 | |
%391 = comb.extract %387 from 0 : (i24) -> i18 | |
%392 = comb.concat %false, %390 : i1, i18 | |
%393 = comb.concat %false, %391 : i1, i18 | |
%394 = comb.add %392, %393 : i19 | |
%395 = comb.extract %394 from 18 : (i19) -> i1 | |
%396 = comb.extract %387 from 18 : (i24) -> i6 | |
%397 = comb.concat %385, %396 : i1, i6 | |
%398 = comb.concat %385, %396 : i1, i6 | |
%399 = comb.add %398, %c1_i7 : i7 | |
%400 = comb.mux bin %395, %399, %397 : i7 | |
%401 = comb.extract %394 from 0 : (i19) -> i18 | |
%402 = comb.extract %400 from 1 : (i7) -> i1 | |
%403 = comb.and bin %206, %402 : i1 | |
%404 = comb.extract %394 from 2 : (i19) -> i16 | |
%405 = comb.extract %400 from 0 : (i7) -> i2 | |
%406 = comb.concat %405, %404 : i2, i16 | |
%407 = comb.xor %406, %c-1_i18 : i18 | |
%408 = comb.extract %407 from 8 : (i18) -> i9 | |
%409 = comb.mux %403, %408, %c0_i9 {sv.namehint = "zFractR0_A6_sqrt"} : i9 | |
%410 = comb.extract %400 from 0 : (i7) -> i1 | |
%411 = comb.concat %410, %401 : i1, i18 | |
%412 = comb.extract %394 from 1 : (i19) -> i17 | |
%413 = comb.extract %400 from 0 : (i7) -> i2 | |
%414 = comb.concat %413, %412 : i2, i17 | |
%415 = comb.mux %329, %411, %414 {sv.namehint = "sqrR0_A5_sqrt"} : i19 | |
%416 = comb.extract %400 from 2 : (i7) -> i1 | |
%417 = comb.and bin %35, %416 : i1 | |
%418 = comb.extract %407 from 9 : (i18) -> i9 | |
%419 = comb.mux %417, %418, %c0_i9 {sv.namehint = "zFractR0_A4_div"} : i9 | |
%420 = comb.extract %394 from 11 : (i19) -> i1 | |
%421 = comb.and bin %211, %420 : i1 | |
%422 = comb.extract %407 from 0 : (i18) -> i9 | |
%423 = comb.mux %421, %422, %c0_i9 {sv.namehint = "zSigma0_A2"} : i9 | |
%424 = comb.extract %394 from 10 : (i19) -> i8 | |
%425 = comb.extract %394 from 9 : (i19) -> i9 | |
%426 = comb.concat %400, %424 : i7, i8 | |
%427 = comb.extract %400 from 0 : (i7) -> i6 | |
%428 = comb.concat %427, %425 : i6, i9 | |
%429 = comb.mux %sqrtOp_PA, %426, %428 {sv.namehint = "fractR1_A1"} : i15 | |
%430 = comb.concat %true, %429, %false : i1, i15, i1 | |
%431 = comb.concat %c1_i2, %429 : i2, i15 | |
%432 = comb.mux bin %329, %430, %431 {sv.namehint = "ER1_A1_sqrt"} : i17 | |
%433 = comb.or bin %206, %35 : i1 | |
%434 = comb.or bin %409, %419 : i9 | |
%435 = comb.mux bin %433, %434, %fractR0_A : i9 | |
%436 = comb.extract %415 from 9 : (i19) -> i10 | |
%437 = comb.mux bin %207, %436, %hiSqrR0_A_sqrt : i10 | |
%438 = comb.or bin %208, %210 : i1 | |
%439 = comb.extract %400 from 0 : (i7) -> i3 | |
%440 = comb.concat %439, %401 : i3, i18 | |
%441 = comb.concat %c0_i5, %400, %425 : i5, i7, i9 | |
%442 = comb.mux %208, %440, %441 : i21 | |
%443 = comb.mux bin %438, %442, %partNegSigma0_A : i21 | |
%444 = comb.or bin %36, %206, %207, %209 : i1 | |
%445 = comb.or bin %444, %210, %211 : i1 | |
%446 = comb.extract %407 from 9 : (i18) -> i9 | |
%447 = comb.mux %36, %446, %c0_i9 : i9 | |
%448 = comb.extract %fractB_other_PA from 35 : (i51) -> i9 | |
%449 = comb.mux bin %208, %448, %c0_i9 : i9 | |
%450 = comb.extract %275 from 0 : (i14) -> i9 | |
%451 = comb.or bin %207, %210 : i1 | |
%452 = comb.extract %fractB_other_PA from 44 : (i51) -> i7 | |
%453 = comb.concat %true, %fractB_51_PA, %452 : i1, i1, i7 | |
%454 = comb.mux bin %451, %453, %c0_i9 : i9 | |
%455 = comb.or bin %447, %409, %449, %450, %454, %423 : i9 | |
%456 = comb.mux bin %445, %455, %nextMulAdd9A_A : i9 | |
%457 = comb.or bin %444, %211 : i1 | |
%458 = comb.extract %415 from 0 : (i19) -> i9 | |
%459 = comb.mux bin %207, %458, %c0_i9 : i9 | |
%460 = comb.extract %hiSqrR0_A_sqrt from 0 : (i10) -> i9 | |
%461 = comb.mux bin %208, %460, %c0_i9 : i9 | |
%462 = comb.extract %fractR0_A from 1 : (i9) -> i8 | |
%463 = comb.concat %true, %462 : i1, i8 | |
%464 = comb.mux bin %211, %463, %c0_i9 : i9 | |
%465 = comb.or bin %310, %409, %459, %419, %461, %464 : i9 | |
%466 = comb.mux bin %457, %465, %nextMulAdd9B_A : i9 | |
%467 = comb.mux bin %218, %432, %ER1_B_sqrt : i17 | |
%468 = comb.or bin %212, %228 : i1 | |
%469 = comb.or bin %468, %235, %231, %232, %252, %254, %257 {sv.namehint = "io_latchMulAddA_0"} : i1 | |
%470 = comb.concat %432, %c0_i36 : i17, i36 | |
%471 = comb.mux bin %218, %470, %c0_i53 : i53 | |
%472 = comb.or bin %228, %216 : i1 | |
%473 = comb.mux bin %472, %82, %c0_i53 : i53 | |
%474 = comb.mux bin %235, %79, %c0_i53 : i53 | |
%475 = comb.or bin %471, %473, %474 : i53 | |
%476 = comb.extract %564 from 12 : (i46) -> i34 | |
%477 = comb.extract %475 from 0 : (i53) -> i34 | |
%478 = comb.or bin %477, %476 : i34 | |
%479 = comb.or bin %232, %252 : i1 | |
%480 = comb.extract %io_mulAddResult_3 from 59 : (i105) -> i46 | |
%481 = comb.mux bin %479, %480, %c0_i46 : i46 | |
%482 = comb.extract %475 from 46 : (i53) -> i7 | |
%483 = comb.extract %475 from 34 : (i53) -> i12 | |
%484 = comb.concat %483, %478 : i12, i34 | |
%485 = comb.extract %sigXN_C from 25 : (i58) -> i33 | |
%486 = comb.concat %485, %c0_i13 : i33, i13 | |
%487 = comb.mux bin %259, %486, %c0_i46 : i46 | |
%488 = comb.concat %u_C_sqrt, %c0_i15 : i31, i15 | |
%489 = comb.mux bin %262, %488, %c0_i46 : i46 | |
%490 = comb.or bin %484, %481, %487, %489 : i46 | |
%491 = comb.concat %482, %490 : i7, i46 | |
%492 = comb.mux bin %260, %168, %c0_i53 : i53 | |
%493 = comb.or bin %491, %492 : i53 | |
%494 = comb.concat %false, %493 : i1, i53 | |
%495 = comb.or bin %494, %580 {sv.namehint = "io_mulAddA_0"} : i54 | |
%496 = comb.or bin %468, %240, %231, %252, %254, %257 {sv.namehint = "io_latchMulAddB_0"} : i1 | |
%497 = comb.concat %true, %429, %c0_i36 : i1, i15, i36 | |
%498 = comb.mux bin %212, %497, %c0_i52 : i52 | |
%499 = comb.concat %ESqrR1_B_sqrt, %c0_i19 : i32, i19 | |
%500 = comb.mux bin %228, %499, %c0_i51 : i51 | |
%501 = comb.extract %498 from 51 : (i52) -> i1 | |
%502 = comb.extract %498 from 0 : (i52) -> i51 | |
%503 = comb.or bin %502, %500 : i51 | |
%504 = comb.concat %ER1_B_sqrt, %c0_i36 : i17, i36 | |
%505 = comb.mux bin %240, %504, %c0_i53 : i53 | |
%506 = comb.concat %false, %501, %503 : i1, i1, i51 | |
%507 = comb.or bin %506, %505 : i53 | |
%508 = comb.extract %507 from 46 : (i53) -> i7 | |
%509 = comb.extract %507 from 0 : (i53) -> i46 | |
%510 = comb.or bin %509, %564 : i46 | |
%511 = comb.extract %sqrSigma1_C from 1 : (i33) -> i30 | |
%512 = comb.mux bin %252, %511, %c0_i30 : i30 | |
%513 = comb.extract %510 from 0 : (i46) -> i30 | |
%514 = comb.or bin %513, %512 : i30 | |
%515 = comb.mux bin %254, %sqrSigma1_C, %c0_i33 : i33 | |
%516 = comb.extract %510 from 33 : (i46) -> i13 | |
%517 = comb.extract %510 from 30 : (i46) -> i3 | |
%518 = comb.concat %517, %514 : i3, i30 | |
%519 = comb.or bin %518, %515 : i33 | |
%520 = comb.concat %false, %508, %516, %519 : i1, i7, i13, i33 | |
%521 = comb.or bin %520, %579 {sv.namehint = "io_mulAddB_0"} : i54 | |
%522 = comb.or bin %209, %214, %216, %225, %226, %228, %229, %241, %243, %238, %245, %254 : i1 | |
%523 = comb.or bin %210, %215, %226, %227, %229, %230, %242, %244, %239, %252, %255 : i1 | |
%524 = comb.or bin %211, %216, %227, %228, %230, %231, %243, %245, %253, %256 : i1 | |
%525 = comb.or bin %469, %229, %244 : i1 | |
%526 = comb.concat %522, %523, %524, %525 {sv.namehint = "io_usingMulAdd"} : i1, i1, i1, i1 | |
%527 = comb.concat %sigX1_B, %c0_i47 : i58, i47 | |
%528 = comb.mux bin %234, %527, %c0_i105 : i105 | |
%529 = comb.concat %sigX1_B, %c0_i46 : i58, i46 | |
%530 = comb.mux bin %252, %529, %c0_i104 : i104 | |
%531 = comb.extract %528 from 104 : (i105) -> i1 | |
%532 = comb.extract %528 from 0 : (i105) -> i104 | |
%533 = comb.or bin %532, %530 : i104 | |
%534 = comb.concat %531, %533 : i1, i104 | |
%535 = comb.or bin %262, %256 : i1 | |
%536 = comb.concat %sigXN_C, %c0_i47 : i58, i47 | |
%537 = comb.mux bin %535, %536, %c0_i105 : i105 | |
%538 = comb.or bin %534, %537 : i105 | |
%539 = comb.xor bin %E_E_div, %true : i1 | |
%540 = comb.and bin %270, %194, %539 : i1 | |
%541 = comb.concat %fractA_0_PC, %c0_i53 : i1, i53 | |
%542 = comb.mux bin %540, %541, %c0_i54 : i54 | |
%543 = comb.extract %538 from 0 : (i105) -> i54 | |
%544 = comb.or bin %543, %542 : i54 | |
%545 = comb.extract %fractB_other_PC from 0 : (i51) -> i1 | |
%546 = comb.concat %545, %false : i1, i1 | |
%547 = comb.extract %fractB_other_PC from 1 : (i51) -> i1 | |
%548 = comb.xor bin %547, %545 : i1 | |
%549 = comb.concat %548, %545 : i1, i1 | |
%550 = comb.mux bin %176, %546, %549 : i2 | |
%551 = comb.xor bin %extraT_E, %true : i1 | |
%552 = comb.concat %551, %false : i1, i1 | |
%553 = comb.xor bin %550, %552 : i2 | |
%554 = comb.concat %553, %c0_i54 : i2, i54 | |
%555 = comb.mux bin %273, %554, %c0_i56 : i56 | |
%556 = comb.extract %538 from 56 : (i105) -> i49 | |
%557 = comb.extract %538 from 54 : (i105) -> i2 | |
%558 = comb.concat %557, %544 : i2, i54 | |
%559 = comb.or bin %558, %555 : i56 | |
%560 = comb.concat %556, %559 {sv.namehint = "io_mulAddC_2"} : i49, i56 | |
%561 = comb.extract %io_mulAddResult_3 from 72 {sv.namehint = "ESqrR1_B8_sqrt"} : (i105) -> i32 | |
%562 = comb.extract %io_mulAddResult_3 from 45 : (i105) -> i46 | |
%563 = comb.xor bin %562, %c-1_i46 : i46 | |
%564 = comb.mux bin %231, %563, %c0_i46 {sv.namehint = "zSigma1_B4"} : i46 | |
%565 = comb.extract %io_mulAddResult_3 from 47 {sv.namehint = "sqrSigma1_B1"} : (i105) -> i33 | |
%566 = comb.extract %io_mulAddResult_3 from 47 {sv.namehint = "sigXNU_B3_CX"} : (i105) -> i58 | |
%567 = comb.extract %io_mulAddResult_3 from 104 : (i105) -> i1 | |
%568 = comb.xor bin %567, %true {sv.namehint = "E_C1_div"} : i1 | |
%569 = comb.and bin %260, %567 : i1 | |
%570 = comb.or bin %569, %264 : i1 | |
%571 = comb.extract %io_mulAddResult_3 from 51 : (i105) -> i54 | |
%572 = comb.xor bin %571, %c-1_i54 : i54 | |
%573 = comb.mux bin %570, %572, %c0_i54 : i54 | |
%574 = comb.and bin %260, %568 : i1 | |
%575 = comb.extract %io_mulAddResult_3 from 50 : (i105) -> i53 | |
%576 = comb.xor bin %575, %c-1_i53 : i53 | |
%577 = comb.concat %false, %576 : i1, i53 | |
%578 = comb.mux bin %574, %577, %c0_i54 : i54 | |
%579 = comb.or bin %573, %578 {sv.namehint = "zComplSigT_C1"} : i54 | |
%580 = comb.mux bin %264, %572, %c0_i54 {sv.namehint = "zComplSigT_C1_sqrt"} : i54 | |
%581 = comb.xor bin %579, %c-1_i54 {sv.namehint = "sigT_C1"} : i54 | |
%582 = comb.mux bin %227, %561, %ESqrR1_B_sqrt : i32 | |
%583 = comb.mux bin %232, %566, %sigX1_B : i58 | |
%584 = comb.mux bin %234, %565, %sqrSigma1_C : i33 | |
%585 = comb.or bin %252, %258, %263 : i1 | |
%586 = comb.mux bin %585, %566, %sigXN_C : i58 | |
%587 = comb.extract %io_mulAddResult_3 from 73 : (i105) -> i31 | |
%588 = comb.mux bin %261, %587, %u_C_sqrt : i31 | |
%589 = comb.mux bin %257, %568, %E_E_div : i1 | |
%590 = comb.extract %581 from 1 : (i54) -> i53 | |
%591 = comb.mux bin %257, %590, %sigT_E : i53 | |
%592 = comb.extract %581 from 0 : (i54) -> i1 | |
%593 = comb.mux bin %257, %592, %extraT_E : i1 | |
%594 = comb.extract %io_mulAddResult_3 from 55 : (i105) -> i1 | |
%595 = comb.extract %io_mulAddResult_3 from 53 : (i105) -> i1 | |
%596 = comb.mux bin %sqrtOp_PC, %594, %595 : i1 | |
%597 = comb.mux bin %271, %596, %isNegRemT_E : i1 | |
%598 = comb.extract %io_mulAddResult_3 from 0 : (i105) -> i54 | |
%599 = comb.icmp bin eq %598, %c0_i54 : i54 | |
%600 = comb.extract %io_mulAddResult_3 from 54 : (i105) -> i2 | |
%601 = comb.icmp bin eq %600, %c0_i2 : i2 | |
%602 = comb.or bin %194, %601 : i1 | |
%603 = comb.and bin %599, %602 : i1 | |
%604 = comb.mux bin %271, %603, %isZeroRemT_E : i1 | |
%605 = comb.and bin %194, %E_E_div : i1 | |
%606 = comb.mux bin %605, %exp_PC, %c0_i14 : i14 | |
%607 = comb.or %sqrtOp_PC, %E_E_div : i1 | |
%608 = comb.mux bin %607, %c0_i14, %181 : i14 | |
%609 = comb.or bin %606, %608 : i14 | |
%610 = comb.add %179, %c1024_i13 : i13 | |
%611 = comb.mux bin %sqrtOp_PC, %610, %c0_i13 : i13 | |
%612 = comb.extract %609 from 13 : (i14) -> i1 | |
%613 = comb.extract %609 from 0 : (i14) -> i13 | |
%614 = comb.or bin %613, %611 {sv.namehint = "posExpX_E"} : i13 | |
%615 = comb.concat %612, %614 {sv.namehint = "sExpX_E"} : i1, i13 | |
%616 = comb.xor bin %614, %c-1_i13 : i13 | |
%617 = comb.extract %616 from 12 : (i13) -> i1 | |
%618 = comb.extract %616 from 11 : (i13) -> i1 | |
%619 = comb.extract %616 from 10 : (i13) -> i1 | |
%620 = comb.extract %616 from 9 : (i13) -> i1 | |
%621 = comb.extract %616 from 8 : (i13) -> i1 | |
%622 = comb.extract %616 from 7 : (i13) -> i1 | |
%623 = comb.extract %616 from 6 : (i13) -> i1 | |
%624 = comb.extract %616 from 0 : (i13) -> i6 | |
%625 = comb.concat %c0_i59, %624 : i59, i6 | |
%626 = comb.shrs bin %c-18446744073709551616_i65, %625 : i65 | |
%627 = comb.extract %626 from 18 : (i65) -> i2 | |
%628 = comb.extract %626 from 22 : (i65) -> i2 | |
%629 = comb.extract %626 from 26 : (i65) -> i2 | |
%630 = comb.extract %626 from 30 : (i65) -> i2 | |
%631 = comb.extract %626 from 34 : (i65) -> i2 | |
%632 = comb.extract %626 from 38 : (i65) -> i2 | |
%633 = comb.extract %626 from 20 : (i65) -> i2 | |
%634 = comb.concat %633, %628 : i2, i2 | |
%635 = comb.extract %626 from 24 : (i65) -> i2 | |
%636 = comb.extract %626 from 28 : (i65) -> i2 | |
%637 = comb.concat %636, %630 : i2, i2 | |
%638 = comb.extract %626 from 32 : (i65) -> i2 | |
%639 = comb.extract %626 from 36 : (i65) -> i2 | |
%640 = comb.concat %639, %632 : i2, i2 | |
%641 = comb.extract %626 from 45 : (i65) -> i1 | |
%642 = comb.extract %626 from 37 : (i65) -> i1 | |
%643 = comb.concat %627, %633, %628, %635, %629, %636, %630, %638, %631, %642 : i2, i2, i2, i2, i2, i2, i2, i2, i2, i1 | |
%644 = comb.and %643, %c-174763_i19 : i19 | |
%645 = comb.extract %626 from 14 : (i65) -> i1 | |
%646 = comb.extract %626 from 16 : (i65) -> i1 | |
%647 = comb.extract %626 from 18 : (i65) -> i1 | |
%648 = comb.and %634, %c5_i4 : i4 | |
%649 = comb.extract %626 from 24 : (i65) -> i1 | |
%650 = comb.extract %626 from 26 : (i65) -> i1 | |
%651 = comb.and %637, %c5_i4 : i4 | |
%652 = comb.extract %626 from 32 : (i65) -> i1 | |
%653 = comb.extract %626 from 34 : (i65) -> i1 | |
%654 = comb.and %640, %c5_i4 : i4 | |
%655 = comb.extract %626 from 40 : (i65) -> i1 | |
%656 = comb.extract %626 from 42 : (i65) -> i1 | |
%657 = comb.extract %626 from 44 : (i65) -> i1 | |
%658 = comb.extract %626 from 15 : (i65) -> i1 | |
%659 = comb.extract %626 from 17 : (i65) -> i1 | |
%660 = comb.extract %644 from 15 : (i19) -> i4 | |
%661 = comb.or %660, %648 : i4 | |
%662 = comb.extract %626 from 23 : (i65) -> i1 | |
%663 = comb.extract %644 from 13 : (i19) -> i1 | |
%664 = comb.or %663, %649 : i1 | |
%665 = comb.extract %626 from 25 : (i65) -> i1 | |
%666 = comb.extract %644 from 7 : (i19) -> i4 | |
%667 = comb.or %666, %651 : i4 | |
%668 = comb.extract %626 from 31 : (i65) -> i1 | |
%669 = comb.extract %644 from 5 : (i19) -> i1 | |
%670 = comb.or %669, %652 : i1 | |
%671 = comb.extract %626 from 33 : (i65) -> i1 | |
%672 = comb.extract %644 from 0 : (i19) -> i3 | |
%673 = comb.concat %672, %false : i3, i1 | |
%674 = comb.or %673, %654 : i4 | |
%675 = comb.extract %626 from 39 : (i65) -> i1 | |
%676 = comb.extract %626 from 41 : (i65) -> i1 | |
%677 = comb.extract %626 from 43 : (i65) -> i1 | |
%678 = comb.extract %626 from 61 : (i65) -> i1 | |
%679 = comb.extract %626 from 46 : (i65) -> i1 | |
%680 = comb.extract %626 from 48 : (i65) -> i1 | |
%681 = comb.extract %626 from 50 : (i65) -> i1 | |
%682 = comb.extract %626 from 52 : (i65) -> i1 | |
%683 = comb.extract %626 from 54 : (i65) -> i1 | |
%684 = comb.extract %626 from 56 : (i65) -> i1 | |
%685 = comb.extract %626 from 58 : (i65) -> i1 | |
%686 = comb.extract %626 from 60 : (i65) -> i1 | |
%687 = comb.extract %626 from 47 : (i65) -> i1 | |
%688 = comb.extract %626 from 49 : (i65) -> i1 | |
%689 = comb.extract %626 from 51 : (i65) -> i1 | |
%690 = comb.extract %626 from 53 : (i65) -> i1 | |
%691 = comb.extract %626 from 55 : (i65) -> i1 | |
%692 = comb.extract %626 from 57 : (i65) -> i1 | |
%693 = comb.extract %626 from 59 : (i65) -> i1 | |
%694 = comb.extract %626 from 62 : (i65) -> i1 | |
%695 = comb.extract %626 from 63 : (i65) -> i1 | |
%696 = comb.concat %645, %658, %646, %659, %647, %661, %662, %664, %665, %650, %667, %668, %670, %671, %653, %674, %675, %655, %676, %656, %677, %657, %641, %679, %687, %680, %688, %681, %689, %682, %690, %683, %691, %684, %692, %685, %693, %686, %678, %694, %695 : i1, i1, i1, i1, i1, i4, i1, i1, i1, i1, i4, i1, i1, i1, i1, i4, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%697 = comb.xor bin %696, %c-1_i50 : i50 | |
%698 = comb.or bin %620, %621, %622, %623 : i1 | |
%699 = comb.mux bin %698, %c0_i50, %697 : i50 | |
%700 = comb.xor bin %699, %c-1_i50 : i50 | |
%701 = comb.concat %700, %c-1_i3 : i50, i3 | |
%702 = comb.extract %626 from 0 : (i65) -> i1 | |
%703 = comb.extract %626 from 1 : (i65) -> i1 | |
%704 = comb.extract %626 from 2 : (i65) -> i1 | |
%705 = comb.concat %702, %703, %704 : i1, i1, i1 | |
%706 = comb.and bin %620, %621, %622, %623 : i1 | |
%707 = comb.mux bin %706, %705, %c0_i3 : i3 | |
%708 = comb.concat %c0_i50, %707 : i50, i3 | |
%709 = comb.mux bin %619, %701, %708 : i53 | |
%710 = comb.and bin %617, %618 : i1 | |
%711 = comb.mux bin %710, %709, %c0_i53 {sv.namehint = "roundMask_E"} : i53 | |
%712 = comb.concat %false, %711 : i1, i53 | |
%713 = comb.xor %711, %c-1_i53 : i53 | |
%714 = comb.concat %true, %713 : i1, i53 | |
%715 = comb.concat %711, %true : i53, i1 | |
%716 = comb.and bin %714, %715 {sv.namehint = "incrPosMask_E"} : i54 | |
%717 = comb.extract %713 from 1 : (i53) -> i52 | |
%718 = comb.concat %true, %717 : i1, i52 | |
%719 = comb.and bin %sigT_E, %718, %711 : i53 | |
%720 = comb.icmp bin ne %719, %c0_i53 {sv.namehint = "hiRoundPosBitT_E"} : i53 | |
%721 = comb.extract %711 from 1 : (i53) -> i52 | |
%722 = comb.extract %sigT_E from 0 : (i53) -> i52 | |
%723 = comb.xor %722, %c-1_i52 : i52 | |
%724 = comb.and bin %723, %721 : i52 | |
%725 = comb.icmp bin eq %724, %c0_i52 {sv.namehint = "all1sHiRoundExtraT_E"} : i52 | |
%726 = comb.extract %711 from 0 : (i53) -> i1 | |
%727 = comb.xor bin %726, %true : i1 | |
%728 = comb.concat %727, %719 : i1, i53 | |
%729 = comb.icmp bin ne %728, %c0_i54 : i54 | |
%730 = comb.and bin %729, %725 {sv.namehint = "all1sHiRoundT_E"} : i1 | |
%731 = comb.concat %false, %sigT_E : i1, i53 | |
%732 = comb.concat %c0_i53, %186 : i53, i1 | |
%733 = comb.add %731, %732 {sv.namehint = "sigAdjT_E"} : i54 | |
%734 = comb.xor bin %711, %c-1_i53 : i53 | |
%735 = comb.concat %true, %734 : i1, i53 | |
%736 = comb.and bin %733, %735 {sv.namehint = "sigY0_E"} : i54 | |
%737 = comb.or bin %733, %712 : i54 | |
%738 = comb.add %737, %c1_i54 {sv.namehint = "sigY1_E"} : i54 | |
%739 = comb.xor bin %isNegRemT_E, %true : i1 | |
%740 = comb.xor bin %isZeroRemT_E, %true : i1 | |
%741 = comb.and bin %739, %740 : i1 | |
%742 = comb.mux bin %sqrtOp_PC, %741, %isNegRemT_E {sv.namehint = "trueLtX_E1"} : i1 | |
%743 = comb.xor bin %742, %true : i1 | |
%744 = comb.and bin %726, %743, %725, %extraT_E : i1 | |
%745 = comb.xor bin %720, %744 {sv.namehint = "hiRoundPosBit_E1"} : i1 | |
%746 = comb.or bin %740, %551 : i1 | |
%747 = comb.concat %746, %724 : i1, i52 | |
%748 = comb.icmp bin eq %747, %c0_i53 : i53 | |
%749 = comb.and bin %183, %745, %748 : i1 | |
%750 = comb.mux bin %749, %716, %c0_i54 {sv.namehint = "roundEvenMask_E1"} : i54 | |
%751 = comb.and bin %188, %182, %extraT_E, %743, %730 : i1 | |
%752 = comb.and bin %extraT_E, %743 : i1 | |
%753 = comb.and bin %752, %740 : i1 | |
%754 = comb.xor bin %730, %true : i1 | |
%755 = comb.or bin %753, %754 : i1 | |
%756 = comb.and bin %186, %755 : i1 | |
%757 = comb.or bin %extraT_E, %743 : i1 | |
%758 = comb.and bin %757, %727 : i1 | |
%759 = comb.and bin %752, %725 : i1 | |
%760 = comb.or bin %720, %758, %759 : i1 | |
%761 = comb.and bin %183, %760 : i1 | |
%762 = comb.or bin %751, %756, %761 : i1 | |
%763 = comb.mux bin %762, %738, %736 : i54 | |
%764 = comb.xor bin %750, %c-1_i54 : i54 | |
%765 = comb.extract %763 from 0 : (i54) -> i52 | |
%766 = comb.extract %764 from 0 : (i54) -> i52 | |
%767 = comb.and bin %765, %766 {sv.namehint = "fractY_E1"} : i52 | |
%768 = comb.concat %745, %746, %724 : i1, i1, i52 | |
%769 = comb.icmp bin ne %768, %c0_i54 {sv.namehint = "inexactY_E1"} : i54 | |
%770 = comb.extract %763 from 53 : (i54) -> i1 | |
%771 = comb.extract %764 from 53 : (i54) -> i1 | |
%772 = comb.and bin %770, %771 : i1 | |
%773 = comb.mux bin %772, %c0_i14, %615 : i14 | |
%774 = comb.and bin %772, %194 : i1 | |
%775 = comb.and bin %774, %E_E_div : i1 | |
%776 = comb.mux bin %775, %181, %c0_i14 : i14 | |
%777 = comb.and bin %774, %539 : i1 | |
%778 = comb.mux bin %777, %175, %c0_i14 : i14 | |
%779 = comb.or bin %773, %776, %778 : i14 | |
%780 = comb.and bin %772, %sqrtOp_PC : i1 | |
%781 = comb.add %177, %c1024_i13 : i13 | |
%782 = comb.mux bin %780, %781, %c0_i13 : i13 | |
%783 = comb.extract %779 from 13 : (i14) -> i1 | |
%784 = comb.extract %779 from 0 : (i14) -> i13 | |
%785 = comb.or bin %784, %782 : i13 | |
%786 = comb.extract %785 from 0 {sv.namehint = "expY_E1"} : (i13) -> i12 | |
%787 = comb.xor bin %783, %true : i1 | |
%788 = comb.extract %785 from 10 : (i13) -> i3 | |
%789 = comb.icmp bin ugt %788, %c2_i3 : i3 | |
%790 = comb.icmp bin ult %785, %c974_i13 : i13 | |
%791 = comb.or bin %783, %790 {sv.namehint = "totalUnderflowY_E1"} : i1 | |
%792 = comb.icmp bin ult %614, %c1026_i13 : i13 | |
%793 = comb.and bin %792, %769 : i1 | |
%794 = comb.or bin %791, %793 {sv.namehint = "underflowY_E1"} : i1 | |
%795 = comb.xor bin %165, %true : i1 | |
%796 = comb.and bin %795, %158, %sign_PC : i1 | |
%797 = comb.and bin %150, %159 : i1 | |
%798 = comb.and bin %155, %164 : i1 | |
%799 = comb.or bin %797, %798 : i1 | |
%800 = comb.mux bin %sqrtOp_PC, %796, %799 {sv.namehint = "notSigNaN_invalid_PC"} : i1 | |
%801 = comb.and bin %194, %156, %157 : i1 | |
%802 = comb.or bin %801, %167, %800 {sv.namehint = "invalid_PC"} : i1 | |
%803 = comb.and bin %194, %172, %149, %159 {sv.namehint = "infinity_PC"} : i1 | |
%804 = comb.and bin %174, %787, %789 {sv.namehint = "overflow_E1"} : i1 | |
%805 = comb.and bin %174, %794 {sv.namehint = "underflow_E1"} : i1 | |
%806 = comb.and bin %174, %769 : i1 | |
%807 = comb.or bin %804, %805, %806 {sv.namehint = "inexact_E1"} : i1 | |
%808 = comb.and bin %791, %188 : i1 | |
%809 = comb.or bin %150, %164, %808 : i1 | |
%810 = comb.mux bin %sqrtOp_PC, %159, %809 {sv.namehint = "notSpecial_isZeroOut_E1"} : i1 | |
%811 = comb.and bin %174, %791, %186 {sv.namehint = "pegMinFiniteMagOut_E1"} : i1 | |
%812 = comb.xor bin %187, %true : i1 | |
%813 = comb.and bin %804, %812 {sv.namehint = "pegMaxFiniteMagOut_E1"} : i1 | |
%814 = comb.and bin %804, %187 : i1 | |
%815 = comb.or bin %155, %159, %814 : i1 | |
%816 = comb.mux bin %sqrtOp_PC, %164, %815 {sv.namehint = "notNaN_isInfOut_E1"} : i1 | |
%817 = comb.and bin %194, %156 : i1 | |
%818 = comb.or bin %817, %165, %800 {sv.namehint = "isNaNOut_PC"} : i1 | |
%819 = comb.xor bin %818, %true : i1 | |
%820 = comb.xor %sqrtOp_PC, %true : i1 | |
%821 = comb.or %820, %159 : i1 | |
%822 = comb.and bin %819, %821, %sign_PC {sv.namehint = "signOut_PC"} : i1 | |
%823 = comb.mux bin %810, %c-512_i12, %c0_i12 : i12 | |
%824 = comb.xor bin %823, %c-1_i12 : i12 | |
%825 = comb.mux bin %811, %c-975_i12, %c0_i12 : i12 | |
%826 = comb.xor bin %825, %c-1_i12 : i12 | |
%827 = comb.xor %813, %true : i1 | |
%828 = comb.concat %true, %827, %c-1_i10 : i1, i1, i10 | |
%829 = comb.xor %816, %true : i1 | |
%830 = comb.concat %c-1_i2, %829, %c-1_i9 : i2, i1, i9 | |
%831 = comb.and bin %786, %824, %826, %828, %830 : i12 | |
%832 = comb.mux bin %811, %c974_i12, %c0_i12 : i12 | |
%833 = comb.mux bin %813, %c-1025_i12, %c0_i12 : i12 | |
%834 = comb.mux bin %816, %c-1024_i12, %c0_i12 : i12 | |
%835 = comb.mux bin %818, %c-512_i12, %c0_i12 : i12 | |
%836 = comb.or bin %831, %832, %833, %834, %835 {sv.namehint = "expOut_E1"} : i12 | |
%837 = comb.or bin %810, %791, %818 : i1 | |
%838 = comb.concat %818, %c0_i51 : i1, i51 | |
%839 = comb.mux bin %837, %838, %767 : i52 | |
%840 = comb.replicate %813 : (i1) -> i52 | |
%841 = comb.or bin %839, %840 {sv.namehint = "fractOut_E1"} : i52 | |
%842 = comb.concat %822, %836, %841 {sv.namehint = "io_out"} : i1, i12, i52 | |
%843 = comb.concat %802, %803, %804, %805, %807 {sv.namehint = "io_exceptionFlags"} : i1, i1, i1, i1, i1 | |
hw.output %9, %11, %195, %196, %842, %843, %526, %469, %495, %496, %521, %560 : i1, i1, i1, i1, i65, i5, i4, i1, i54, i1, i54, i105 | |
} | |
hw.module private @Mul54(in %clock : !seq.clock, in %io_val_s0 : i1, in %io_latch_a_s0 : i1, in %io_a_s0 : i54, in %io_latch_b_s0 : i1, in %io_b_s0 : i54, in %io_c_s2 : i105, out io_result_s3 : i105) { | |
%c0_i51 = hw.constant 0 : i51 | |
%val_s1 = seq.firreg %io_val_s0 clock %clock {firrtl.random_init_start = 0 : ui64} : i1 | |
%val_s2 = seq.firreg %val_s1 clock %clock {firrtl.random_init_start = 1 : ui64} : i1 | |
%reg_a_s1 = seq.firreg %1 clock %clock {firrtl.random_init_start = 2 : ui64} : i54 | |
%reg_b_s1 = seq.firreg %3 clock %clock {firrtl.random_init_start = 56 : ui64} : i54 | |
%reg_a_s2 = seq.firreg %4 clock %clock {firrtl.random_init_start = 110 : ui64} : i54 | |
%reg_b_s2 = seq.firreg %5 clock %clock {firrtl.random_init_start = 164 : ui64} : i54 | |
%reg_result_s3 = seq.firreg %10 clock %clock {firrtl.random_init_start = 218 : ui64, sv.namehint = "io_result_s3"} : i105 | |
%0 = comb.and bin %io_val_s0, %io_latch_a_s0 : i1 | |
%1 = comb.mux bin %0, %io_a_s0, %reg_a_s1 : i54 | |
%2 = comb.and bin %io_val_s0, %io_latch_b_s0 : i1 | |
%3 = comb.mux bin %2, %io_b_s0, %reg_b_s1 : i54 | |
%4 = comb.mux bin %val_s1, %reg_a_s1, %reg_a_s2 : i54 | |
%5 = comb.mux bin %val_s1, %reg_b_s1, %reg_b_s2 : i54 | |
%6 = comb.concat %c0_i51, %reg_a_s2 : i51, i54 | |
%7 = comb.concat %c0_i51, %reg_b_s2 : i51, i54 | |
%8 = comb.mul %6, %7 : i105 | |
%9 = comb.add %8, %io_c_s2 : i105 | |
%10 = comb.mux bin %val_s2, %9, %reg_result_s3 : i105 | |
hw.output %reg_result_s3 : i105 | |
} | |
hw.module private @MulAddRecFN_preMul(in %io_op : i2, in %io_a : i33, in %io_b : i33, in %io_c : i33, in %io_roundingMode : i2, out io_mulAddA : i24, out io_mulAddB : i24, out io_mulAddC : i48, out io_toPostMul_highExpA : i3, out io_toPostMul_isNaN_isQuietNaNA : i1, out io_toPostMul_highExpB : i3, out io_toPostMul_isNaN_isQuietNaNB : i1, out io_toPostMul_signProd : i1, out io_toPostMul_isZeroProd : i1, out io_toPostMul_opSignC : i1, out io_toPostMul_highExpC : i3, out io_toPostMul_isNaN_isQuietNaNC : i1, out io_toPostMul_isCDominant : i1, out io_toPostMul_CAlignDist_0 : i1, out io_toPostMul_CAlignDist : i7, out io_toPostMul_bit0AlignedNegSigC : i1, out io_toPostMul_highAlignedNegSigC : i26, out io_toPostMul_sExpSum : i11, out io_toPostMul_roundingMode : i2) { | |
%c27_i11 = hw.constant 27 : i11 | |
%c74_i10 = hw.constant 74 : i10 | |
%c25_i10 = hw.constant 25 : i10 | |
%c0_i24 = hw.constant 0 : i24 | |
%c0_i68 = hw.constant 0 : i68 | |
%c0_i59 = hw.constant 0 : i59 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i10 = hw.constant 0 : i10 | |
%true = hw.constant true | |
%c0_i3 = hw.constant 0 : i3 | |
%c-54_i7 = hw.constant -54 : i7 | |
%c-1_i14 = hw.constant -1 : i14 | |
%c0_i7 = hw.constant 0 : i7 | |
%c-18446744073709551616_i65 = hw.constant -18446744073709551616 : i65 | |
%0 = comb.extract %io_a from 32 {sv.namehint = "signA"} : (i33) -> i1 | |
%1 = comb.extract %io_a from 23 {sv.namehint = "expA"} : (i33) -> i9 | |
%2 = comb.extract %io_a from 0 {sv.namehint = "fractA"} : (i33) -> i23 | |
%3 = comb.extract %io_a from 29 {sv.namehint = "io_toPostMul_highExpA"} : (i33) -> i3 | |
%4 = comb.icmp bin ne %3, %c0_i3 : i3 | |
%5 = comb.xor bin %4, %true {sv.namehint = "isZeroA"} : i1 | |
%6 = comb.concat %4, %2 {sv.namehint = "sigA"} : i1, i23 | |
%7 = comb.extract %io_b from 32 {sv.namehint = "signB"} : (i33) -> i1 | |
%8 = comb.extract %io_b from 0 {sv.namehint = "fractB"} : (i33) -> i23 | |
%9 = comb.extract %io_b from 29 {sv.namehint = "io_toPostMul_highExpB"} : (i33) -> i3 | |
%10 = comb.icmp bin ne %9, %c0_i3 : i3 | |
%11 = comb.xor bin %10, %true {sv.namehint = "isZeroB"} : i1 | |
%12 = comb.concat %10, %8 {sv.namehint = "sigB"} : i1, i23 | |
%13 = comb.extract %io_c from 32 : (i33) -> i1 | |
%14 = comb.extract %io_op from 0 : (i2) -> i1 | |
%15 = comb.xor bin %13, %14 {sv.namehint = "opSignC"} : i1 | |
%16 = comb.extract %io_c from 23 {sv.namehint = "expC"} : (i33) -> i9 | |
%17 = comb.extract %io_c from 0 {sv.namehint = "fractC"} : (i33) -> i23 | |
%18 = comb.extract %io_c from 29 {sv.namehint = "io_toPostMul_highExpC"} : (i33) -> i3 | |
%19 = comb.icmp bin ne %18, %c0_i3 : i3 | |
%20 = comb.concat %19, %17 {sv.namehint = "sigC"} : i1, i23 | |
%21 = comb.extract %io_op from 1 : (i2) -> i1 | |
%22 = comb.xor bin %0, %7, %21 {sv.namehint = "signProd"} : i1 | |
%23 = comb.or bin %5, %11 {sv.namehint = "isZeroProd"} : i1 | |
%24 = comb.extract %io_b from 31 : (i33) -> i1 | |
%25 = comb.xor bin %24, %true : i1 | |
%26 = comb.replicate %25 : (i1) -> i3 | |
%27 = comb.extract %io_b from 23 : (i33) -> i8 | |
%28 = comb.concat %c0_i2, %1 : i2, i9 | |
%29 = comb.concat %26, %27 : i3, i8 | |
%30 = comb.add %28, %29, %c27_i11 {sv.namehint = "sExpAlignedProd"} : i11 | |
%31 = comb.xor bin %22, %15 {sv.namehint = "doSubMags"} : i1 | |
%32 = comb.concat %c0_i2, %16 : i2, i9 | |
%33 = comb.sub %30, %32 : i11 | |
%34 = comb.extract %33 from 10 : (i11) -> i1 | |
%35 = comb.or bin %23, %34 {sv.namehint = "CAlignDist_floor"} : i1 | |
%36 = comb.extract %33 from 0 : (i11) -> i10 | |
%37 = comb.icmp bin eq %36, %c0_i10 : i10 | |
%38 = comb.or bin %35, %37 {sv.namehint = "CAlignDist_0"} : i1 | |
%39 = comb.icmp bin ult %36, %c25_i10 : i10 | |
%40 = comb.or bin %35, %39 : i1 | |
%41 = comb.and bin %19, %40 {sv.namehint = "isCDominant"} : i1 | |
%42 = comb.icmp bin ult %36, %c74_i10 : i10 | |
%43 = comb.extract %33 from 0 : (i11) -> i7 | |
%44 = comb.mux bin %42, %43, %c-54_i7 : i7 | |
%45 = comb.mux bin %35, %c0_i7, %44 {sv.namehint = "CAlignDist"} : i7 | |
%46 = comb.concat %c0_i2, %16 : i2, i9 | |
%47 = comb.mux bin %35, %46, %30 {sv.namehint = "sExpSum"} : i11 | |
%48 = comb.extract %45 from 6 : (i7) -> i1 | |
%49 = comb.extract %45 from 0 : (i7) -> i6 | |
%50 = comb.concat %c0_i59, %49 : i59, i6 | |
%51 = comb.shrs bin %c-18446744073709551616_i65, %50 : i65 | |
%52 = comb.extract %51 from 61 : (i65) -> i1 | |
%53 = comb.extract %51 from 54 : (i65) -> i1 | |
%54 = comb.extract %51 from 56 : (i65) -> i1 | |
%55 = comb.extract %51 from 58 : (i65) -> i1 | |
%56 = comb.extract %51 from 60 : (i65) -> i1 | |
%57 = comb.extract %51 from 55 : (i65) -> i1 | |
%58 = comb.extract %51 from 57 : (i65) -> i1 | |
%59 = comb.extract %51 from 59 : (i65) -> i1 | |
%60 = comb.extract %51 from 62 : (i65) -> i1 | |
%61 = comb.extract %51 from 63 : (i65) -> i1 | |
%62 = comb.concat %53, %57, %54, %58, %55, %59, %56, %52, %60, %61, %c-1_i14 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i14 | |
%63 = comb.extract %51 from 7 : (i65) -> i1 | |
%64 = comb.extract %51 from 0 : (i65) -> i1 | |
%65 = comb.extract %51 from 2 : (i65) -> i1 | |
%66 = comb.extract %51 from 4 : (i65) -> i1 | |
%67 = comb.extract %51 from 6 : (i65) -> i1 | |
%68 = comb.extract %51 from 1 : (i65) -> i1 | |
%69 = comb.extract %51 from 3 : (i65) -> i1 | |
%70 = comb.extract %51 from 5 : (i65) -> i1 | |
%71 = comb.extract %51 from 8 : (i65) -> i1 | |
%72 = comb.extract %51 from 9 : (i65) -> i1 | |
%73 = comb.extract %51 from 10 : (i65) -> i1 | |
%74 = comb.extract %51 from 11 : (i65) -> i1 | |
%75 = comb.extract %51 from 12 : (i65) -> i1 | |
%76 = comb.extract %51 from 13 : (i65) -> i1 | |
%77 = comb.concat %c0_i10, %64, %68, %65, %69, %66, %70, %67, %63, %71, %72, %73, %74, %75, %76 : i10, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%78 = comb.mux bin %48, %62, %77 {sv.namehint = "CExtraMask"} : i24 | |
%79 = comb.replicate %31 : (i1) -> i24 | |
%80 = comb.xor %79, %20 {sv.namehint = "negSigC"} : i24 | |
%81 = comb.replicate %31 : (i1) -> i50 | |
%82 = comb.concat %31, %80, %81 : i1, i24, i50 | |
%83 = comb.concat %c0_i68, %45 : i68, i7 | |
%84 = comb.shrs bin %82, %83 : i75 | |
%85 = comb.and bin %20, %78 : i24 | |
%86 = comb.icmp bin ne %85, %c0_i24 : i24 | |
%87 = comb.xor bin %86, %31 {sv.namehint = "io_toPostMul_bit0AlignedNegSigC"} : i1 | |
%88 = comb.extract %84 from 0 {sv.namehint = "io_mulAddC"} : (i75) -> i48 | |
%89 = comb.extract %io_a from 22 {sv.namehint = "io_toPostMul_isNaN_isQuietNaNA"} : (i33) -> i1 | |
%90 = comb.extract %io_b from 22 {sv.namehint = "io_toPostMul_isNaN_isQuietNaNB"} : (i33) -> i1 | |
%91 = comb.extract %io_c from 22 {sv.namehint = "io_toPostMul_isNaN_isQuietNaNC"} : (i33) -> i1 | |
%92 = comb.extract %84 from 48 {sv.namehint = "io_toPostMul_highAlignedNegSigC"} : (i75) -> i26 | |
hw.output %6, %12, %88, %3, %89, %9, %90, %22, %23, %15, %18, %91, %41, %38, %45, %87, %92, %47, %io_roundingMode : i24, i24, i48, i3, i1, i3, i1, i1, i1, i1, i3, i1, i1, i1, i7, i1, i26, i11, i2 | |
} | |
hw.module private @MulAddRecFN_postMul(in %io_fromPreMul_highExpA : i3, in %io_fromPreMul_isNaN_isQuietNaNA : i1, in %io_fromPreMul_highExpB : i3, in %io_fromPreMul_isNaN_isQuietNaNB : i1, in %io_fromPreMul_signProd : i1, in %io_fromPreMul_isZeroProd : i1, in %io_fromPreMul_opSignC : i1, in %io_fromPreMul_highExpC : i3, in %io_fromPreMul_isNaN_isQuietNaNC : i1, in %io_fromPreMul_isCDominant : i1, in %io_fromPreMul_CAlignDist_0 : i1, in %io_fromPreMul_CAlignDist : i7, in %io_fromPreMul_bit0AlignedNegSigC : i1, in %io_fromPreMul_highAlignedNegSigC : i26, in %io_fromPreMul_sExpSum : i11, in %io_fromPreMul_roundingMode : i2, in %io_mulAddResult : i49, out io_out : i33, out io_exceptionFlags : i5) { | |
%c0_i22 = hw.constant 0 : i22 | |
%c-1_i6 = hw.constant -1 : i6 | |
%c-1_i7 = hw.constant -1 : i7 | |
%c1_i10 = hw.constant 1 : i10 | |
%c-1_i25 = hw.constant -1 : i25 | |
%c-1_i5 = hw.constant -1 : i5 | |
%c-55_i7 = hw.constant -55 : i7 | |
%c1_i26 = hw.constant 1 : i26 | |
%c3_i3 = hw.constant 3 : i3 | |
%c-1_i9 = hw.constant -1 : i9 | |
%c0_i52 = hw.constant 0 : i52 | |
%c-1_i26 = hw.constant -1 : i26 | |
%c-1_i21 = hw.constant -1 : i21 | |
%c0_i59 = hw.constant 0 : i59 | |
%c-1_i10 = hw.constant -1 : i10 | |
%c0_i38 = hw.constant 0 : i38 | |
%c0_i13 = hw.constant 0 : i13 | |
%c0_i10 = hw.constant 0 : i10 | |
%c0_i34 = hw.constant 0 : i34 | |
%c-1_i75 = hw.constant -1 : i75 | |
%c0_i8 = hw.constant 0 : i8 | |
%c0_i18 = hw.constant 0 : i18 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i3 = hw.constant 0 : i3 | |
%false = hw.constant false | |
%c-1_i2 = hw.constant -1 : i2 | |
%c-2_i2 = hw.constant -2 : i2 | |
%true = hw.constant true | |
%c-1_i16 = hw.constant -1 : i16 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i32 = hw.constant 0 : i32 | |
%c-1_i4 = hw.constant -1 : i4 | |
%c-126_i8 = hw.constant -126 : i8 | |
%c-127_i8 = hw.constant -127 : i8 | |
%c-64_i9 = hw.constant -64 : i9 | |
%c0_i9 = hw.constant 0 : i9 | |
%c-129_i9 = hw.constant -129 : i9 | |
%c-128_i9 = hw.constant -128 : i9 | |
%c0_i42 = hw.constant 0 : i42 | |
%c-65536_i17 = hw.constant -65536 : i17 | |
%c-18446744073709551616_i65 = hw.constant -18446744073709551616 : i65 | |
%c0_i21 = hw.constant 0 : i21 | |
%c0_i4 = hw.constant 0 : i4 | |
%c0_i25 = hw.constant 0 : i25 | |
%c0_i26 = hw.constant 0 : i26 | |
%c-108_i9 = hw.constant -108 : i9 | |
%c107_i9 = hw.constant 107 : i9 | |
%0 = comb.icmp bin eq %io_fromPreMul_highExpA, %c0_i3 {sv.namehint = "isZeroA"} : i3 | |
%1 = comb.extract %io_fromPreMul_highExpA from 1 : (i3) -> i2 | |
%2 = comb.icmp bin eq %1, %c-1_i2 {sv.namehint = "isSpecialA"} : i2 | |
%3 = comb.extract %io_fromPreMul_highExpA from 0 : (i3) -> i1 | |
%4 = comb.xor bin %3, %true : i1 | |
%5 = comb.and bin %2, %4 {sv.namehint = "isInfA"} : i1 | |
%6 = comb.and bin %2, %3 {sv.namehint = "isNaNA"} : i1 | |
%7 = comb.xor bin %io_fromPreMul_isNaN_isQuietNaNA, %true : i1 | |
%8 = comb.and bin %6, %7 {sv.namehint = "isSigNaNA"} : i1 | |
%9 = comb.icmp bin eq %io_fromPreMul_highExpB, %c0_i3 {sv.namehint = "isZeroB"} : i3 | |
%10 = comb.extract %io_fromPreMul_highExpB from 1 : (i3) -> i2 | |
%11 = comb.icmp bin eq %10, %c-1_i2 {sv.namehint = "isSpecialB"} : i2 | |
%12 = comb.extract %io_fromPreMul_highExpB from 0 : (i3) -> i1 | |
%13 = comb.xor bin %12, %true : i1 | |
%14 = comb.and bin %11, %13 {sv.namehint = "isInfB"} : i1 | |
%15 = comb.and bin %11, %12 {sv.namehint = "isNaNB"} : i1 | |
%16 = comb.xor bin %io_fromPreMul_isNaN_isQuietNaNB, %true : i1 | |
%17 = comb.and bin %15, %16 {sv.namehint = "isSigNaNB"} : i1 | |
%18 = comb.icmp bin ne %io_fromPreMul_highExpC, %c0_i3 : i3 | |
%19 = comb.xor bin %18, %true {sv.namehint = "isZeroC"} : i1 | |
%20 = comb.extract %io_fromPreMul_highExpC from 1 : (i3) -> i2 | |
%21 = comb.icmp bin eq %20, %c-1_i2 {sv.namehint = "isSpecialC"} : i2 | |
%22 = comb.extract %io_fromPreMul_highExpC from 0 : (i3) -> i1 | |
%23 = comb.xor bin %22, %true : i1 | |
%24 = comb.and bin %21, %23 {sv.namehint = "isInfC"} : i1 | |
%25 = comb.and bin %21, %22 {sv.namehint = "isNaNC"} : i1 | |
%26 = comb.xor bin %io_fromPreMul_isNaN_isQuietNaNC, %true : i1 | |
%27 = comb.and bin %25, %26 {sv.namehint = "isSigNaNC"} : i1 | |
%28 = comb.icmp bin eq %io_fromPreMul_roundingMode, %c0_i2 {sv.namehint = "roundingMode_nearest_even"} : i2 | |
%29 = comb.icmp bin eq %io_fromPreMul_roundingMode, %c-2_i2 {sv.namehint = "signZeroNotEqOpSigns"} : i2 | |
%30 = comb.icmp bin eq %io_fromPreMul_roundingMode, %c-1_i2 {sv.namehint = "roundingMode_max"} : i2 | |
%31 = comb.xor bin %io_fromPreMul_signProd, %io_fromPreMul_opSignC {sv.namehint = "doSubMags"} : i1 | |
%32 = comb.extract %io_mulAddResult from 48 : (i49) -> i1 | |
%33 = comb.add %io_fromPreMul_highAlignedNegSigC, %c1_i26 : i26 | |
%34 = comb.mux bin %32, %33, %io_fromPreMul_highAlignedNegSigC : i26 | |
%35 = comb.extract %io_mulAddResult from 0 : (i49) -> i48 | |
%36 = comb.concat %34, %35, %io_fromPreMul_bit0AlignedNegSigC {sv.namehint = "sigSum"} : i26, i48, i1 | |
%37 = comb.extract %34 from 0 : (i26) -> i2 | |
%38 = comb.extract %io_mulAddResult from 1 : (i49) -> i47 | |
%39 = comb.concat %37, %38 : i2, i47 | |
%40 = comb.extract %34 from 0 : (i26) -> i1 | |
%41 = comb.concat %40, %35 : i1, i48 | |
%42 = comb.xor %39, %41 : i49 | |
%43 = comb.extract %42 from 31 : (i49) -> i18 | |
%44 = comb.icmp bin ne %43, %c0_i18 : i18 | |
%45 = comb.extract %42 from 47 : (i49) -> i2 | |
%46 = comb.icmp bin ne %45, %c0_i2 : i2 | |
%47 = comb.extract %42 from 48 : (i49) -> i1 | |
%48 = comb.extract %42 from 39 : (i49) -> i8 | |
%49 = comb.icmp bin ne %48, %c0_i8 : i8 | |
%50 = comb.extract %42 from 43 : (i49) -> i4 | |
%51 = comb.icmp bin ne %50, %c0_i4 : i4 | |
%52 = comb.extract %42 from 46 : (i49) -> i1 | |
%53 = comb.extract %42 from 45 : (i49) -> i1 | |
%54 = comb.extract %42 from 44 : (i49) -> i1 | |
%55 = comb.concat %false, %54 : i1, i1 | |
%56 = comb.mux bin %53, %c-2_i2, %55 : i2 | |
%57 = comb.mux bin %52, %c-1_i2, %56 : i2 | |
%58 = comb.extract %42 from 42 : (i49) -> i1 | |
%59 = comb.extract %42 from 41 : (i49) -> i1 | |
%60 = comb.extract %42 from 40 : (i49) -> i1 | |
%61 = comb.concat %false, %60 : i1, i1 | |
%62 = comb.mux bin %59, %c-2_i2, %61 : i2 | |
%63 = comb.mux bin %58, %c-1_i2, %62 : i2 | |
%64 = comb.mux bin %51, %57, %63 : i2 | |
%65 = comb.concat %51, %64 : i1, i2 | |
%66 = comb.extract %42 from 35 : (i49) -> i4 | |
%67 = comb.icmp bin ne %66, %c0_i4 : i4 | |
%68 = comb.extract %42 from 38 : (i49) -> i1 | |
%69 = comb.extract %42 from 37 : (i49) -> i1 | |
%70 = comb.extract %42 from 36 : (i49) -> i1 | |
%71 = comb.concat %false, %70 : i1, i1 | |
%72 = comb.mux bin %69, %c-2_i2, %71 : i2 | |
%73 = comb.mux bin %68, %c-1_i2, %72 : i2 | |
%74 = comb.extract %42 from 34 : (i49) -> i1 | |
%75 = comb.extract %42 from 33 : (i49) -> i1 | |
%76 = comb.extract %42 from 32 : (i49) -> i1 | |
%77 = comb.concat %false, %76 : i1, i1 | |
%78 = comb.mux bin %75, %c-2_i2, %77 : i2 | |
%79 = comb.mux bin %74, %c-1_i2, %78 : i2 | |
%80 = comb.mux bin %67, %73, %79 : i2 | |
%81 = comb.concat %67, %80 : i1, i2 | |
%82 = comb.mux bin %49, %65, %81 : i3 | |
%83 = comb.concat %49, %82 : i1, i3 | |
%84 = comb.concat %c0_i3, %47 : i3, i1 | |
%85 = comb.mux bin %46, %84, %83 : i4 | |
%86 = comb.concat %46, %85 : i1, i4 | |
%87 = comb.extract %42 from 15 : (i49) -> i16 | |
%88 = comb.icmp bin ne %87, %c0_i16 : i16 | |
%89 = comb.extract %42 from 23 : (i49) -> i8 | |
%90 = comb.icmp bin ne %89, %c0_i8 : i8 | |
%91 = comb.extract %42 from 27 : (i49) -> i4 | |
%92 = comb.icmp bin ne %91, %c0_i4 : i4 | |
%93 = comb.extract %42 from 30 : (i49) -> i1 | |
%94 = comb.extract %42 from 29 : (i49) -> i1 | |
%95 = comb.extract %42 from 28 : (i49) -> i1 | |
%96 = comb.concat %false, %95 : i1, i1 | |
%97 = comb.mux bin %94, %c-2_i2, %96 : i2 | |
%98 = comb.mux bin %93, %c-1_i2, %97 : i2 | |
%99 = comb.extract %42 from 26 : (i49) -> i1 | |
%100 = comb.extract %42 from 25 : (i49) -> i1 | |
%101 = comb.extract %42 from 24 : (i49) -> i1 | |
%102 = comb.concat %false, %101 : i1, i1 | |
%103 = comb.mux bin %100, %c-2_i2, %102 : i2 | |
%104 = comb.mux bin %99, %c-1_i2, %103 : i2 | |
%105 = comb.mux bin %92, %98, %104 : i2 | |
%106 = comb.concat %92, %105 : i1, i2 | |
%107 = comb.extract %42 from 19 : (i49) -> i4 | |
%108 = comb.icmp bin ne %107, %c0_i4 : i4 | |
%109 = comb.extract %42 from 22 : (i49) -> i1 | |
%110 = comb.extract %42 from 21 : (i49) -> i1 | |
%111 = comb.extract %42 from 20 : (i49) -> i1 | |
%112 = comb.concat %false, %111 : i1, i1 | |
%113 = comb.mux bin %110, %c-2_i2, %112 : i2 | |
%114 = comb.mux bin %109, %c-1_i2, %113 : i2 | |
%115 = comb.extract %42 from 18 : (i49) -> i1 | |
%116 = comb.extract %42 from 17 : (i49) -> i1 | |
%117 = comb.extract %42 from 16 : (i49) -> i1 | |
%118 = comb.concat %false, %117 : i1, i1 | |
%119 = comb.mux bin %116, %c-2_i2, %118 : i2 | |
%120 = comb.mux bin %115, %c-1_i2, %119 : i2 | |
%121 = comb.mux bin %108, %114, %120 : i2 | |
%122 = comb.concat %108, %121 : i1, i2 | |
%123 = comb.mux bin %90, %106, %122 : i3 | |
%124 = comb.concat %90, %123 : i1, i3 | |
%125 = comb.extract %42 from 7 : (i49) -> i8 | |
%126 = comb.icmp bin ne %125, %c0_i8 : i8 | |
%127 = comb.extract %42 from 11 : (i49) -> i4 | |
%128 = comb.icmp bin ne %127, %c0_i4 : i4 | |
%129 = comb.extract %42 from 14 : (i49) -> i1 | |
%130 = comb.extract %42 from 13 : (i49) -> i1 | |
%131 = comb.extract %42 from 12 : (i49) -> i1 | |
%132 = comb.concat %false, %131 : i1, i1 | |
%133 = comb.mux bin %130, %c-2_i2, %132 : i2 | |
%134 = comb.mux bin %129, %c-1_i2, %133 : i2 | |
%135 = comb.extract %42 from 10 : (i49) -> i1 | |
%136 = comb.extract %42 from 9 : (i49) -> i1 | |
%137 = comb.extract %42 from 8 : (i49) -> i1 | |
%138 = comb.concat %false, %137 : i1, i1 | |
%139 = comb.mux bin %136, %c-2_i2, %138 : i2 | |
%140 = comb.mux bin %135, %c-1_i2, %139 : i2 | |
%141 = comb.mux bin %128, %134, %140 : i2 | |
%142 = comb.concat %128, %141 : i1, i2 | |
%143 = comb.extract %42 from 3 : (i49) -> i4 | |
%144 = comb.icmp bin ne %143, %c0_i4 : i4 | |
%145 = comb.extract %42 from 6 : (i49) -> i1 | |
%146 = comb.extract %42 from 5 : (i49) -> i1 | |
%147 = comb.extract %42 from 4 : (i49) -> i1 | |
%148 = comb.concat %false, %147 : i1, i1 | |
%149 = comb.mux bin %146, %c-2_i2, %148 : i2 | |
%150 = comb.mux bin %145, %c-1_i2, %149 : i2 | |
%151 = comb.extract %42 from 2 : (i49) -> i1 | |
%152 = comb.extract %42 from 1 : (i49) -> i1 | |
%153 = comb.extract %42 from 0 : (i49) -> i1 | |
%154 = comb.concat %false, %153 : i1, i1 | |
%155 = comb.mux bin %152, %c-2_i2, %154 : i2 | |
%156 = comb.mux bin %151, %c-1_i2, %155 : i2 | |
%157 = comb.mux bin %144, %150, %156 : i2 | |
%158 = comb.concat %144, %157 : i1, i2 | |
%159 = comb.mux bin %126, %142, %158 : i3 | |
%160 = comb.concat %126, %159 : i1, i3 | |
%161 = comb.mux bin %88, %124, %160 : i4 | |
%162 = comb.concat %88, %161 : i1, i4 | |
%163 = comb.mux bin %44, %86, %162 : i5 | |
%164 = comb.concat %false, %44, %163 : i1, i1, i5 | |
%165 = comb.sub %c-55_i7, %164 {sv.namehint = "estNormNeg_dist"} : i7 | |
%166 = comb.extract %io_mulAddResult from 0 : (i49) -> i17 | |
%167 = comb.concat %166, %io_fromPreMul_bit0AlignedNegSigC : i17, i1 | |
%168 = comb.icmp bin ne %167, %c0_i18 : i18 | |
%169 = comb.xor bin %36, %c-1_i75 {sv.namehint = "complSigSum"} : i75 | |
%170 = comb.extract %169 from 0 : (i75) -> i18 | |
%171 = comb.icmp bin ne %170, %c0_i18 : i18 | |
%172 = comb.or bin %io_fromPreMul_CAlignDist_0, %31 : i1 | |
%173 = comb.extract %io_fromPreMul_CAlignDist from 0 : (i7) -> i5 | |
%174 = comb.add %173, %c-1_i5 : i5 | |
%175 = comb.concat %c0_i2, %174 : i2, i5 | |
%176 = comb.mux bin %172, %io_fromPreMul_CAlignDist, %175 {sv.namehint = "CDom_estNormDist"} : i7 | |
%177 = comb.xor bin %31, %true : i1 | |
%178 = comb.extract %176 from 4 : (i7) -> i1 | |
%179 = comb.xor bin %178, %true : i1 | |
%180 = comb.extract %io_mulAddResult from 33 : (i49) -> i15 | |
%181 = comb.extract %io_mulAddResult from 0 : (i49) -> i33 | |
%182 = comb.concat %181, %io_fromPreMul_bit0AlignedNegSigC : i33, i1 | |
%183 = comb.icmp bin ne %182, %c0_i34 : i34 | |
%184 = comb.concat %34, %180, %183 : i26, i15, i1 | |
%185 = comb.or %31, %178 : i1 | |
%186 = comb.mux bin %185, %c0_i42, %184 : i42 | |
%187 = comb.and bin %177, %178 : i1 | |
%188 = comb.extract %io_mulAddResult from 17 : (i49) -> i31 | |
%189 = comb.extract %34 from 0 : (i26) -> i10 | |
%190 = comb.concat %189, %188, %168 : i10, i31, i1 | |
%191 = comb.mux bin %187, %190, %c0_i42 : i42 | |
%192 = comb.and bin %31, %179 : i1 | |
%193 = comb.extract %169 from 34 : (i75) -> i41 | |
%194 = comb.extract %169 from 0 : (i75) -> i34 | |
%195 = comb.icmp bin ne %194, %c0_i34 : i34 | |
%196 = comb.concat %193, %195 : i41, i1 | |
%197 = comb.mux bin %192, %196, %c0_i42 : i42 | |
%198 = comb.and bin %31, %178 : i1 | |
%199 = comb.extract %169 from 18 : (i75) -> i41 | |
%200 = comb.concat %199, %171 : i41, i1 | |
%201 = comb.mux bin %198, %200, %c0_i42 : i42 | |
%202 = comb.or bin %186, %191, %197, %201 {sv.namehint = "CDom_firstNormAbsSigSum"} : i42 | |
%203 = comb.extract %io_mulAddResult from 17 : (i49) -> i31 | |
%204 = comb.extract %34 from 0 : (i26) -> i2 | |
%205 = comb.xor bin %171, %true : i1 | |
%206 = comb.mux bin %31, %205, %168 : i1 | |
%207 = comb.extract %io_mulAddResult from 0 : (i49) -> i42 | |
%208 = comb.extract %165 from 5 : (i7) -> i1 | |
%209 = comb.extract %165 from 4 : (i7) -> i1 | |
%210 = comb.extract %io_mulAddResult from 0 : (i49) -> i26 | |
%211 = comb.replicate %31 : (i1) -> i16 | |
%212 = comb.concat %210, %211 : i26, i16 | |
%213 = comb.mux bin %209, %212, %207 : i42 | |
%214 = comb.extract %io_mulAddResult from 0 : (i49) -> i10 | |
%215 = comb.replicate %31 : (i1) -> i32 | |
%216 = comb.concat %214, %215 : i10, i32 | |
%217 = comb.concat %c0_i8, %204, %203, %206 : i8, i2, i31, i1 | |
%218 = comb.mux bin %209, %217, %216 : i42 | |
%219 = comb.mux bin %208, %213, %218 {sv.namehint = "notCDom_pos_firstNormAbsSigSum"} : i42 | |
%220 = comb.extract %169 from 18 : (i75) -> i32 | |
%221 = comb.extract %169 from 1 : (i75) -> i42 | |
%222 = comb.extract %169 from 1 : (i75) -> i27 | |
%223 = comb.concat %222, %c0_i16 : i27, i16 | |
%224 = comb.concat %false, %221 : i1, i42 | |
%225 = comb.mux bin %209, %223, %224 : i43 | |
%226 = comb.extract %169 from 1 : (i75) -> i11 | |
%227 = comb.concat %226, %c0_i32 : i11, i32 | |
%228 = comb.concat %c0_i10, %220, %171 : i10, i32, i1 | |
%229 = comb.mux bin %209, %228, %227 : i43 | |
%230 = comb.mux bin %208, %225, %229 {sv.namehint = "notCDom_neg_cFirstNormAbsSigSum"} : i43 | |
%231 = comb.extract %34 from 2 {sv.namehint = "notCDom_signSigSum"} : (i26) -> i1 | |
%232 = comb.and bin %31, %18 : i1 | |
%233 = comb.mux bin %io_fromPreMul_isCDominant, %232, %231 {sv.namehint = "doNegSignSum"} : i1 | |
%234 = comb.mux bin %io_fromPreMul_isCDominant, %176, %165 {sv.namehint = "estNormDist"} : i7 | |
%235 = comb.concat %false, %202 : i1, i42 | |
%236 = comb.mux bin %io_fromPreMul_isCDominant, %235, %230 : i43 | |
%237 = comb.mux bin %io_fromPreMul_isCDominant, %202, %219 : i42 | |
%238 = comb.concat %false, %237 : i1, i42 | |
%239 = comb.mux bin %231, %236, %238 {sv.namehint = "cFirstNormAbsSigSum"} : i43 | |
%240 = comb.xor bin %io_fromPreMul_isCDominant, %true : i1 | |
%241 = comb.xor bin %231, %true : i1 | |
%242 = comb.and bin %240, %241, %31 {sv.namehint = "doIncrSig"} : i1 | |
%243 = comb.extract %234 from 0 {sv.namehint = "estNormDist_5"} : (i7) -> i4 | |
%244 = comb.xor bin %243, %c-1_i4 {sv.namehint = "normTo2ShiftDist"} : i4 | |
%245 = comb.concat %c0_i13, %244 : i13, i4 | |
%246 = comb.shrs bin %c-65536_i17, %245 : i17 | |
%247 = comb.extract %246 from 8 : (i17) -> i1 | |
%248 = comb.extract %246 from 1 : (i17) -> i1 | |
%249 = comb.extract %246 from 3 : (i17) -> i1 | |
%250 = comb.extract %246 from 5 : (i17) -> i1 | |
%251 = comb.extract %246 from 7 : (i17) -> i1 | |
%252 = comb.extract %246 from 2 : (i17) -> i1 | |
%253 = comb.extract %246 from 4 : (i17) -> i1 | |
%254 = comb.extract %246 from 6 : (i17) -> i1 | |
%255 = comb.extract %246 from 9 : (i17) -> i1 | |
%256 = comb.extract %246 from 10 : (i17) -> i1 | |
%257 = comb.extract %246 from 11 : (i17) -> i1 | |
%258 = comb.extract %246 from 12 : (i17) -> i1 | |
%259 = comb.extract %246 from 13 : (i17) -> i1 | |
%260 = comb.extract %246 from 14 : (i17) -> i1 | |
%261 = comb.extract %246 from 15 : (i17) -> i1 | |
%262 = comb.concat %248, %252, %249, %253, %250, %254, %251, %247, %255, %256, %257, %258, %259, %260, %261, %true {sv.namehint = "absSigSumExtraMask"} : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%263 = comb.extract %239 from 1 : (i43) -> i42 | |
%264 = comb.concat %c0_i38, %244 : i38, i4 | |
%265 = comb.shru bin %263, %264 : i42 | |
%266 = comb.extract %239 from 0 : (i43) -> i16 | |
%267 = comb.xor bin %266, %c-1_i16 : i16 | |
%268 = comb.and bin %267, %262 : i16 | |
%269 = comb.icmp bin eq %268, %c0_i16 : i16 | |
%270 = comb.and bin %266, %262 : i16 | |
%271 = comb.icmp bin ne %270, %c0_i16 : i16 | |
%272 = comb.mux bin %242, %269, %271 : i1 | |
%273 = comb.extract %265 from 25 : (i42) -> i2 | |
%274 = comb.icmp bin eq %273, %c0_i2 {sv.namehint = "sigX3Shift1"} : i2 | |
%275 = comb.concat %c0_i4, %234 : i4, i7 | |
%276 = comb.sub %io_fromPreMul_sExpSum, %275 {sv.namehint = "sExpX3"} : i11 | |
%277 = comb.extract %265 from 24 : (i42) -> i3 | |
%278 = comb.icmp bin ne %277, %c0_i3 : i3 | |
%279 = comb.xor bin %278, %true {sv.namehint = "isZeroY"} : i1 | |
%280 = comb.xor bin %io_fromPreMul_signProd, %233 : i1 | |
%281 = comb.mux bin %278, %280, %29 {sv.namehint = "signY"} : i1 | |
%282 = comb.extract %276 from 0 {sv.namehint = "sExpX3_13"} : (i11) -> i10 | |
%283 = comb.extract %276 from 10 : (i11) -> i1 | |
%284 = comb.replicate %283 : (i1) -> i27 | |
%285 = comb.xor bin %282, %c-1_i10 : i10 | |
%286 = comb.extract %285 from 9 : (i10) -> i1 | |
%287 = comb.extract %285 from 8 : (i10) -> i1 | |
%288 = comb.extract %285 from 7 : (i10) -> i1 | |
%289 = comb.extract %285 from 6 : (i10) -> i1 | |
%290 = comb.extract %285 from 0 : (i10) -> i6 | |
%291 = comb.concat %c0_i59, %290 : i59, i6 | |
%292 = comb.shrs bin %c-18446744073709551616_i65, %291 : i65 | |
%293 = comb.extract %292 from 58 : (i65) -> i1 | |
%294 = comb.extract %292 from 43 : (i65) -> i1 | |
%295 = comb.extract %292 from 45 : (i65) -> i1 | |
%296 = comb.extract %292 from 47 : (i65) -> i1 | |
%297 = comb.extract %292 from 49 : (i65) -> i1 | |
%298 = comb.extract %292 from 51 : (i65) -> i1 | |
%299 = comb.extract %292 from 53 : (i65) -> i1 | |
%300 = comb.extract %292 from 55 : (i65) -> i1 | |
%301 = comb.extract %292 from 57 : (i65) -> i1 | |
%302 = comb.extract %292 from 44 : (i65) -> i1 | |
%303 = comb.extract %292 from 46 : (i65) -> i1 | |
%304 = comb.extract %292 from 48 : (i65) -> i1 | |
%305 = comb.extract %292 from 50 : (i65) -> i1 | |
%306 = comb.extract %292 from 52 : (i65) -> i1 | |
%307 = comb.extract %292 from 54 : (i65) -> i1 | |
%308 = comb.extract %292 from 56 : (i65) -> i1 | |
%309 = comb.extract %292 from 59 : (i65) -> i1 | |
%310 = comb.extract %292 from 60 : (i65) -> i1 | |
%311 = comb.extract %292 from 61 : (i65) -> i1 | |
%312 = comb.extract %292 from 62 : (i65) -> i1 | |
%313 = comb.extract %292 from 63 : (i65) -> i1 | |
%314 = comb.concat %294, %302, %295, %303, %296, %304, %297, %305, %298, %306, %299, %307, %300, %308, %301, %293, %309, %310, %311, %312, %313 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%315 = comb.xor bin %314, %c-1_i21 : i21 | |
%316 = comb.mux bin %289, %c0_i21, %315 : i21 | |
%317 = comb.xor bin %316, %c-1_i21 : i21 | |
%318 = comb.concat %317, %c-1_i4 : i21, i4 | |
%319 = comb.extract %292 from 0 : (i65) -> i1 | |
%320 = comb.extract %292 from 1 : (i65) -> i1 | |
%321 = comb.extract %292 from 2 : (i65) -> i1 | |
%322 = comb.extract %292 from 3 : (i65) -> i1 | |
%323 = comb.concat %319, %320, %321, %322 : i1, i1, i1, i1 | |
%324 = comb.mux bin %289, %323, %c0_i4 : i4 | |
%325 = comb.concat %c0_i21, %324 : i21, i4 | |
%326 = comb.mux bin %288, %318, %325 : i25 | |
%327 = comb.and bin %286, %287 : i1 | |
%328 = comb.mux bin %327, %326, %c0_i25 : i25 | |
%329 = comb.extract %265 from 25 : (i42) -> i1 | |
%330 = comb.extract %328 from 1 : (i25) -> i24 | |
%331 = comb.extract %328 from 0 : (i25) -> i1 | |
%332 = comb.or bin %331, %329 : i1 | |
%333 = comb.concat %330, %332, %c-1_i2 : i24, i1, i2 | |
%334 = comb.or bin %284, %333 {sv.namehint = "roundMask"} : i27 | |
%335 = comb.extract %334 from 1 : (i27) -> i26 | |
%336 = comb.xor bin %335, %c-1_i26 : i26 | |
%337 = comb.extract %334 from 0 : (i27) -> i26 | |
%338 = comb.extract %265 from 0 : (i42) -> i25 | |
%339 = comb.concat %338, %272 : i25, i1 | |
%340 = comb.and bin %339, %337, %336 : i26 | |
%341 = comb.icmp bin ne %340, %c0_i26 {sv.namehint = "roundPosBit"} : i26 | |
%342 = comb.and bin %339, %335 : i26 | |
%343 = comb.icmp bin ne %342, %c0_i26 {sv.namehint = "anyRoundExtra"} : i26 | |
%344 = comb.extract %265 from 0 : (i42) -> i25 | |
%345 = comb.concat %344, %272 : i25, i1 | |
%346 = comb.xor %345, %c-1_i26 : i26 | |
%347 = comb.and bin %346, %335 : i26 | |
%348 = comb.icmp bin eq %347, %c0_i26 {sv.namehint = "allRoundExtra"} : i26 | |
%349 = comb.concat %340, %342 : i26, i26 | |
%350 = comb.icmp bin ne %349, %c0_i52 {sv.namehint = "anyRound"} : i52 | |
%351 = comb.and bin %341, %348 {sv.namehint = "allRound"} : i1 | |
%352 = comb.mux bin %281, %29, %30 {sv.namehint = "roundDirectUp"} : i1 | |
%353 = comb.xor bin %242, %true : i1 | |
%354 = comb.and bin %353, %28, %341, %343 : i1 | |
%355 = comb.and bin %353, %352, %350 : i1 | |
%356 = comb.and bin %242, %351 : i1 | |
%357 = comb.and bin %242, %28, %341 : i1 | |
%358 = comb.and bin %242, %352 : i1 | |
%359 = comb.or bin %354, %355, %356, %357, %358 {sv.namehint = "roundUp"} : i1 | |
%360 = comb.xor bin %341, %true : i1 | |
%361 = comb.and bin %28, %360, %348 : i1 | |
%362 = comb.xor bin %343, %true : i1 | |
%363 = comb.and bin %28, %341, %362 : i1 | |
%364 = comb.mux bin %242, %361, %363 {sv.namehint = "roundEven"} : i1 | |
%365 = comb.xor bin %351, %true : i1 | |
%366 = comb.mux bin %242, %365, %350 {sv.namehint = "inexactY"} : i1 | |
%367 = comb.extract %265 from 26 : (i42) -> i1 | |
%368 = comb.extract %265 from 1 : (i42) -> i25 | |
%369 = comb.extract %334 from 2 : (i27) -> i25 | |
%370 = comb.or %368, %369 : i25 | |
%371 = comb.concat %367, %370 : i1, i25 | |
%372 = comb.add %371, %c1_i26 {sv.namehint = "roundUp_sigY3"} : i26 | |
%373 = comb.extract %334 from 2 : (i27) -> i25 | |
%374 = comb.xor %373, %c-1_i25 : i25 | |
%375 = comb.extract %265 from 1 : (i42) -> i25 | |
%376 = comb.and %375, %374 : i25 | |
%377 = comb.concat %false, %376 : i1, i25 | |
%378 = comb.or %359, %364 : i1 | |
%379 = comb.mux bin %378, %c0_i26, %377 : i26 | |
%380 = comb.mux bin %359, %372, %c0_i26 : i26 | |
%381 = comb.and bin %372, %336 : i26 | |
%382 = comb.mux bin %364, %381, %c0_i26 : i26 | |
%383 = comb.or bin %379, %380, %382 {sv.namehint = "sigY3"} : i26 | |
%384 = comb.extract %383 from 25 : (i26) -> i1 | |
%385 = comb.extract %276 from 0 : (i11) -> i10 | |
%386 = comb.add %385, %c1_i10 : i10 | |
%387 = comb.mux %384, %386, %c0_i10 : i10 | |
%388 = comb.extract %383 from 24 : (i26) -> i1 | |
%389 = comb.extract %276 from 0 : (i11) -> i10 | |
%390 = comb.mux %388, %389, %c0_i10 : i10 | |
%391 = comb.extract %383 from 24 : (i26) -> i2 | |
%392 = comb.icmp bin eq %391, %c0_i2 : i2 | |
%393 = comb.extract %276 from 0 : (i11) -> i10 | |
%394 = comb.add %393, %c-1_i10 : i10 | |
%395 = comb.mux %392, %394, %c0_i10 : i10 | |
%396 = comb.or %387, %390, %395 {sv.namehint = "sExpY"} : i10 | |
%397 = comb.extract %396 from 0 {sv.namehint = "expY"} : (i10) -> i9 | |
%398 = comb.extract %383 from 0 : (i26) -> i23 | |
%399 = comb.extract %383 from 1 : (i26) -> i23 | |
%400 = comb.mux bin %274, %398, %399 {sv.namehint = "fractY"} : i23 | |
%401 = comb.extract %396 from 7 : (i10) -> i3 | |
%402 = comb.icmp bin eq %401, %c3_i3 {sv.namehint = "overflowY"} : i3 | |
%403 = comb.extract %396 from 9 : (i10) -> i1 | |
%404 = comb.icmp bin ult %397, %c107_i9 : i9 | |
%405 = comb.or bin %403, %404 : i1 | |
%406 = comb.and bin %278, %405 {sv.namehint = "totalUnderflowY"} : i1 | |
%407 = comb.mux bin %274, %c-126_i8, %c-127_i8 : i8 | |
%408 = comb.concat %c0_i2, %407 : i2, i8 | |
%409 = comb.icmp bin ule %282, %408 : i10 | |
%410 = comb.or bin %283, %409 : i1 | |
%411 = comb.and bin %29, %281 : i1 | |
%412 = comb.xor bin %281, %true : i1 | |
%413 = comb.and bin %30, %412 : i1 | |
%414 = comb.or bin %411, %413 {sv.namehint = "roundMagUp"} : i1 | |
%415 = comb.or bin %28, %414 {sv.namehint = "overflowY_roundMagUp"} : i1 | |
%416 = comb.or bin %2, %11 {sv.namehint = "mulSpecial"} : i1 | |
%417 = comb.or bin %416, %21 {sv.namehint = "addSpecial"} : i1 | |
%418 = comb.and bin %io_fromPreMul_isZeroProd, %19 {sv.namehint = "notSpecial_addZeros"} : i1 | |
%419 = comb.xor bin %417, %true : i1 | |
%420 = comb.xor bin %418, %true : i1 | |
%421 = comb.and bin %419, %420 {sv.namehint = "commonCase"} : i1 | |
%422 = comb.and bin %5, %9 : i1 | |
%423 = comb.and bin %0, %14 : i1 | |
%424 = comb.xor bin %6, %true : i1 | |
%425 = comb.xor bin %15, %true : i1 | |
%426 = comb.or bin %5, %14 : i1 | |
%427 = comb.and bin %424, %425, %426, %24, %31 : i1 | |
%428 = comb.or bin %422, %423, %427 {sv.namehint = "notSigNaN_invalid"} : i1 | |
%429 = comb.or bin %8, %17, %27, %428 {sv.namehint = "invalid"} : i1 | |
%430 = comb.and bin %421, %402 {sv.namehint = "overflow"} : i1 | |
%431 = comb.and bin %421, %366, %410 {sv.namehint = "underflow"} : i1 | |
%432 = comb.and bin %421, %366 : i1 | |
%433 = comb.or bin %430, %432 {sv.namehint = "inexact"} : i1 | |
%434 = comb.or bin %418, %279, %406 {sv.namehint = "notSpecial_isZeroOut"} : i1 | |
%435 = comb.and bin %421, %406, %414 {sv.namehint = "pegMinFiniteMagOut"} : i1 | |
%436 = comb.xor bin %415, %true : i1 | |
%437 = comb.and bin %430, %436 {sv.namehint = "pegMaxFiniteMagOut"} : i1 | |
%438 = comb.and bin %430, %415 : i1 | |
%439 = comb.or bin %426, %24, %438 {sv.namehint = "notNaN_isInfOut"} : i1 | |
%440 = comb.or bin %6, %15, %25, %428 {sv.namehint = "isNaNOut"} : i1 | |
%441 = comb.and bin %177, %io_fromPreMul_opSignC : i1 | |
%442 = comb.xor bin %21, %true : i1 | |
%443 = comb.and bin %416, %442, %io_fromPreMul_signProd : i1 | |
%444 = comb.xor bin %416, %true : i1 | |
%445 = comb.and bin %444, %21, %io_fromPreMul_opSignC : i1 | |
%446 = comb.and bin %444, %418, %31, %29 : i1 | |
%447 = comb.or bin %441, %443, %445, %446 {sv.namehint = "uncommonCaseSignOut"} : i1 | |
%448 = comb.xor bin %440, %true : i1 | |
%449 = comb.and bin %448, %447 : i1 | |
%450 = comb.and bin %421, %281 : i1 | |
%451 = comb.or bin %449, %450 {sv.namehint = "signOut"} : i1 | |
%452 = comb.mux bin %434, %c-64_i9, %c0_i9 : i9 | |
%453 = comb.xor bin %452, %c-1_i9 : i9 | |
%454 = comb.mux bin %435, %c-108_i9, %c0_i9 : i9 | |
%455 = comb.xor bin %454, %c-1_i9 : i9 | |
%456 = comb.xor %437, %true : i1 | |
%457 = comb.concat %true, %456, %c-1_i7 : i1, i1, i7 | |
%458 = comb.xor %439, %true : i1 | |
%459 = comb.concat %c-1_i2, %458, %c-1_i6 : i2, i1, i6 | |
%460 = comb.and bin %397, %453, %455, %457, %459 : i9 | |
%461 = comb.mux bin %435, %c107_i9, %c0_i9 : i9 | |
%462 = comb.mux bin %437, %c-129_i9, %c0_i9 : i9 | |
%463 = comb.mux bin %439, %c-128_i9, %c0_i9 : i9 | |
%464 = comb.mux bin %440, %c-64_i9, %c0_i9 : i9 | |
%465 = comb.or bin %460, %461, %462, %463, %464 {sv.namehint = "expOut"} : i9 | |
%466 = comb.and bin %406, %414 : i1 | |
%467 = comb.or bin %466, %440 : i1 | |
%468 = comb.concat %440, %c0_i22 : i1, i22 | |
%469 = comb.mux bin %467, %468, %400 : i23 | |
%470 = comb.replicate %437 : (i1) -> i23 | |
%471 = comb.or bin %469, %470 {sv.namehint = "fractOut"} : i23 | |
%472 = comb.concat %451, %465, %471 {sv.namehint = "io_out"} : i1, i9, i23 | |
%473 = comb.concat %429, %false, %430, %431, %433 {sv.namehint = "io_exceptionFlags"} : i1, i1, i1, i1, i1 | |
hw.output %472, %473 : i33, i5 | |
} | |
hw.module private @RoundRawFNToRecFN(in %io_invalidExc : i1, in %io_in_sign : i1, in %io_in_isNaN : i1, in %io_in_isInf : i1, in %io_in_isZero : i1, in %io_in_sExp : i10, in %io_in_sig : i27, in %io_roundingMode : i2, out io_out : i33, out io_exceptionFlags : i5) { | |
%c-1_i6 = hw.constant -1 : i6 | |
%c-1_i7 = hw.constant -1 : i7 | |
%c2_i4 = hw.constant 2 : i4 | |
%c0_i53 = hw.constant 0 : i53 | |
%c-1_i24 = hw.constant -1 : i24 | |
%c107_i11 = hw.constant 107 : i11 | |
%c1_i26 = hw.constant 1 : i26 | |
%c0_i10 = hw.constant 0 : i10 | |
%c-1_i26 = hw.constant -1 : i26 | |
%c0_i27 = hw.constant 0 : i27 | |
%c-1_i22 = hw.constant -1 : i22 | |
%c0_i59 = hw.constant 0 : i59 | |
%c-1_i9 = hw.constant -1 : i9 | |
%c0_i2 = hw.constant 0 : i2 | |
%c-2_i2 = hw.constant -2 : i2 | |
%c-1_i2 = hw.constant -1 : i2 | |
%c0_i25 = hw.constant 0 : i25 | |
%c-1_i3 = hw.constant -1 : i3 | |
%true = hw.constant true | |
%c0_i26 = hw.constant 0 : i26 | |
%c-64_i9 = hw.constant -64 : i9 | |
%c107_i9 = hw.constant 107 : i9 | |
%c-129_i9 = hw.constant -129 : i9 | |
%c-128_i9 = hw.constant -128 : i9 | |
%c-18446744073709551616_i65 = hw.constant -18446744073709551616 : i65 | |
%c0_i22 = hw.constant 0 : i22 | |
%c0_i3 = hw.constant 0 : i3 | |
%c129_i9 = hw.constant 129 : i9 | |
%c130_i9 = hw.constant 130 : i9 | |
%c0_i9 = hw.constant 0 : i9 | |
%c-108_i9 = hw.constant -108 : i9 | |
%false = hw.constant false | |
%0 = comb.icmp bin eq %io_roundingMode, %c0_i2 {sv.namehint = "roundingMode_nearest_even"} : i2 | |
%1 = comb.icmp bin eq %io_roundingMode, %c-2_i2 {sv.namehint = "roundingMode_min"} : i2 | |
%2 = comb.icmp bin eq %io_roundingMode, %c-1_i2 {sv.namehint = "roundingMode_max"} : i2 | |
%3 = comb.and bin %1, %io_in_sign : i1 | |
%4 = comb.xor bin %io_in_sign, %true : i1 | |
%5 = comb.and bin %2, %4 : i1 | |
%6 = comb.or bin %3, %5 {sv.namehint = "roundMagUp"} : i1 | |
%7 = comb.extract %io_in_sig from 26 {sv.namehint = "doShiftSigDown1"} : (i27) -> i1 | |
%8 = comb.icmp bin slt %io_in_sExp, %c0_i10 {sv.namehint = "isNegExp"} : i10 | |
%9 = comb.replicate %8 : (i1) -> i25 | |
%10 = comb.extract %io_in_sExp from 0 : (i10) -> i9 | |
%11 = comb.xor bin %10, %c-1_i9 : i9 | |
%12 = comb.extract %11 from 8 : (i9) -> i1 | |
%13 = comb.extract %11 from 7 : (i9) -> i1 | |
%14 = comb.extract %11 from 6 : (i9) -> i1 | |
%15 = comb.extract %11 from 0 : (i9) -> i6 | |
%16 = comb.concat %c0_i59, %15 : i59, i6 | |
%17 = comb.shrs bin %c-18446744073709551616_i65, %16 : i65 | |
%18 = comb.extract %17 from 57 : (i65) -> i1 | |
%19 = comb.extract %17 from 42 : (i65) -> i1 | |
%20 = comb.extract %17 from 44 : (i65) -> i1 | |
%21 = comb.extract %17 from 46 : (i65) -> i1 | |
%22 = comb.extract %17 from 48 : (i65) -> i1 | |
%23 = comb.extract %17 from 50 : (i65) -> i1 | |
%24 = comb.extract %17 from 52 : (i65) -> i1 | |
%25 = comb.extract %17 from 54 : (i65) -> i1 | |
%26 = comb.extract %17 from 56 : (i65) -> i1 | |
%27 = comb.extract %17 from 43 : (i65) -> i1 | |
%28 = comb.extract %17 from 45 : (i65) -> i1 | |
%29 = comb.extract %17 from 47 : (i65) -> i1 | |
%30 = comb.extract %17 from 49 : (i65) -> i1 | |
%31 = comb.extract %17 from 51 : (i65) -> i1 | |
%32 = comb.extract %17 from 53 : (i65) -> i1 | |
%33 = comb.extract %17 from 55 : (i65) -> i1 | |
%34 = comb.extract %17 from 58 : (i65) -> i1 | |
%35 = comb.extract %17 from 59 : (i65) -> i1 | |
%36 = comb.extract %17 from 60 : (i65) -> i1 | |
%37 = comb.extract %17 from 61 : (i65) -> i1 | |
%38 = comb.extract %17 from 62 : (i65) -> i1 | |
%39 = comb.extract %17 from 63 : (i65) -> i1 | |
%40 = comb.concat %19, %27, %20, %28, %21, %29, %22, %30, %23, %31, %24, %32, %25, %33, %26, %18, %34, %35, %36, %37, %38, %39 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%41 = comb.xor bin %40, %c-1_i22 : i22 | |
%42 = comb.mux bin %14, %c0_i22, %41 : i22 | |
%43 = comb.xor bin %42, %c-1_i22 : i22 | |
%44 = comb.concat %43, %c-1_i3 : i22, i3 | |
%45 = comb.extract %17 from 0 : (i65) -> i1 | |
%46 = comb.extract %17 from 1 : (i65) -> i1 | |
%47 = comb.extract %17 from 2 : (i65) -> i1 | |
%48 = comb.concat %45, %46, %47 : i1, i1, i1 | |
%49 = comb.mux bin %14, %48, %c0_i3 : i3 | |
%50 = comb.concat %c0_i22, %49 : i22, i3 | |
%51 = comb.mux bin %13, %44, %50 : i25 | |
%52 = comb.mux bin %12, %51, %c0_i25 : i25 | |
%53 = comb.or bin %9, %52 : i25 | |
%54 = comb.extract %53 from 1 : (i25) -> i24 | |
%55 = comb.extract %53 from 0 : (i25) -> i1 | |
%56 = comb.or bin %55, %7 : i1 | |
%57 = comb.concat %8, %54, %56, %true {sv.namehint = "shiftedRoundMask"} : i1, i24, i1, i1 | |
%58 = comb.xor %8, %true : i1 | |
%59 = comb.xor %54, %c-1_i24 : i24 | |
%60 = comb.xor %56, %true : i1 | |
%61 = comb.extract %io_in_sig from 1 : (i27) -> i26 | |
%62 = comb.concat %58, %59, %60 : i1, i24, i1 | |
%63 = comb.concat %54, %56, %true : i24, i1, i1 | |
%64 = comb.and %61, %62, %63 : i26 | |
%65 = comb.icmp bin ne %64, %c0_i26 {sv.namehint = "roundPosBit"} : i26 | |
%66 = comb.and bin %io_in_sig, %57 : i27 | |
%67 = comb.concat %64, %66 : i26, i27 | |
%68 = comb.icmp bin ne %67, %c0_i53 {sv.namehint = "anyRound"} : i53 | |
%69 = comb.and bin %0, %65 : i1 | |
%70 = comb.and bin %6, %68 : i1 | |
%71 = comb.or bin %69, %70 : i1 | |
%72 = comb.extract %io_in_sig from 2 : (i27) -> i25 | |
%73 = comb.concat %54, %56 : i24, i1 | |
%74 = comb.or %72, %73 : i25 | |
%75 = comb.concat %false, %74 : i1, i25 | |
%76 = comb.add bin %75, %c1_i26 : i26 | |
%77 = comb.icmp bin eq %66, %c0_i27 : i27 | |
%78 = comb.and bin %69, %77 : i1 | |
%79 = comb.concat %54, %56, %true : i24, i1, i1 | |
%80 = comb.mux bin %78, %79, %c0_i26 : i26 | |
%81 = comb.xor bin %80, %c-1_i26 : i26 | |
%82 = comb.and bin %76, %81 : i26 | |
%83 = comb.xor %54, %c-1_i24 : i24 | |
%84 = comb.xor %56, %true : i1 | |
%85 = comb.extract %io_in_sig from 2 : (i27) -> i25 | |
%86 = comb.concat %83, %84 : i24, i1 | |
%87 = comb.and bin %85, %86 : i25 | |
%88 = comb.concat %false, %87 : i1, i25 | |
%89 = comb.mux bin %71, %82, %88 {sv.namehint = "roundedSig"} : i26 | |
%90 = comb.extract %89 from 24 : (i26) -> i2 | |
%91 = comb.extract %io_in_sExp from 9 : (i10) -> i1 | |
%92 = comb.concat %91, %io_in_sExp : i1, i10 | |
%93 = comb.concat %c0_i9, %90 : i9, i2 | |
%94 = comb.add bin %92, %93 {sv.namehint = "sRoundedExp"} : i11 | |
%95 = comb.extract %94 from 0 {sv.namehint = "common_expOut"} : (i11) -> i9 | |
%96 = comb.extract %89 from 1 : (i26) -> i23 | |
%97 = comb.extract %89 from 0 : (i26) -> i23 | |
%98 = comb.mux bin %7, %96, %97 {sv.namehint = "common_fractOut"} : i23 | |
%99 = comb.extract %94 from 7 : (i11) -> i4 | |
%100 = comb.icmp bin sgt %99, %c2_i4 {sv.namehint = "common_overflow"} : i4 | |
%101 = comb.icmp bin slt %94, %c107_i11 {sv.namehint = "common_totalUnderflow"} : i11 | |
%102 = comb.mux bin %7, %c129_i9, %c130_i9 : i9 | |
%103 = comb.extract %102 from 8 : (i9) -> i1 | |
%104 = comb.concat %103, %102 : i1, i9 | |
%105 = comb.icmp bin slt %io_in_sExp, %104 : i10 | |
%106 = comb.or bin %io_invalidExc, %io_in_isNaN {sv.namehint = "isNaNOut"} : i1 | |
%107 = comb.xor bin %106, %true : i1 | |
%108 = comb.xor bin %io_in_isInf, %true : i1 | |
%109 = comb.xor bin %io_in_isZero, %true : i1 | |
%110 = comb.and bin %107, %108, %109 {sv.namehint = "commonCase"} : i1 | |
%111 = comb.and bin %110, %100 {sv.namehint = "overflow"} : i1 | |
%112 = comb.and bin %110, %68, %105 {sv.namehint = "underflow"} : i1 | |
%113 = comb.and bin %110, %68 : i1 | |
%114 = comb.or bin %111, %113 {sv.namehint = "inexact"} : i1 | |
%115 = comb.or bin %0, %6 {sv.namehint = "overflow_roundMagUp"} : i1 | |
%116 = comb.and bin %110, %101, %6 {sv.namehint = "pegMinNonzeroMagOut"} : i1 | |
%117 = comb.xor bin %115, %true : i1 | |
%118 = comb.and bin %111, %117 {sv.namehint = "pegMaxFiniteMagOut"} : i1 | |
%119 = comb.and bin %111, %115 : i1 | |
%120 = comb.or bin %io_in_isInf, %119 {sv.namehint = "notNaN_isInfOut"} : i1 | |
%121 = comb.xor %106, %true : i1 | |
%122 = comb.and %121, %io_in_sign {sv.namehint = "signOut"} : i1 | |
%123 = comb.or bin %io_in_isZero, %101 : i1 | |
%124 = comb.mux bin %123, %c-64_i9, %c0_i9 : i9 | |
%125 = comb.xor bin %124, %c-1_i9 : i9 | |
%126 = comb.mux bin %116, %c-108_i9, %c0_i9 : i9 | |
%127 = comb.xor bin %126, %c-1_i9 : i9 | |
%128 = comb.xor %118, %true : i1 | |
%129 = comb.concat %true, %128, %c-1_i7 : i1, i1, i7 | |
%130 = comb.xor %120, %true : i1 | |
%131 = comb.concat %c-1_i2, %130, %c-1_i6 : i2, i1, i6 | |
%132 = comb.and bin %95, %125, %127, %129, %131 : i9 | |
%133 = comb.mux bin %116, %c107_i9, %c0_i9 : i9 | |
%134 = comb.mux bin %118, %c-129_i9, %c0_i9 : i9 | |
%135 = comb.mux bin %120, %c-128_i9, %c0_i9 : i9 | |
%136 = comb.mux bin %106, %c-64_i9, %c0_i9 : i9 | |
%137 = comb.or bin %132, %133, %134, %135, %136 {sv.namehint = "expOut"} : i9 | |
%138 = comb.or bin %101, %106 : i1 | |
%139 = comb.concat %106, %c0_i22 : i1, i22 | |
%140 = comb.mux bin %138, %139, %98 : i23 | |
%141 = comb.replicate %118 : (i1) -> i23 | |
%142 = comb.or bin %140, %141 {sv.namehint = "fractOut"} : i23 | |
%143 = comb.concat %122, %137, %142 {sv.namehint = "io_out"} : i1, i9, i23 | |
%144 = comb.concat %io_invalidExc, %false, %111, %112, %114 {sv.namehint = "io_exceptionFlags"} : i1, i1, i1, i1, i1 | |
hw.output %143, %144 : i33, i5 | |
} | |
hw.module private @MulAddRecFN_preMul_1(in %io_op : i2, in %io_a : i65, in %io_b : i65, in %io_c : i65, in %io_roundingMode : i2, out io_mulAddA : i53, out io_mulAddB : i53, out io_mulAddC : i106, out io_toPostMul_highExpA : i3, out io_toPostMul_isNaN_isQuietNaNA : i1, out io_toPostMul_highExpB : i3, out io_toPostMul_isNaN_isQuietNaNB : i1, out io_toPostMul_signProd : i1, out io_toPostMul_isZeroProd : i1, out io_toPostMul_opSignC : i1, out io_toPostMul_highExpC : i3, out io_toPostMul_isNaN_isQuietNaNC : i1, out io_toPostMul_isCDominant : i1, out io_toPostMul_CAlignDist_0 : i1, out io_toPostMul_CAlignDist : i8, out io_toPostMul_bit0AlignedNegSigC : i1, out io_toPostMul_highAlignedNegSigC : i55, out io_toPostMul_sExpSum : i14, out io_toPostMul_roundingMode : i2) { | |
%false = hw.constant false | |
%c-174763_i19 = hw.constant -174763 : i19 | |
%c5_i4 = hw.constant 5 : i4 | |
%c56_i14 = hw.constant 56 : i14 | |
%c161_i13 = hw.constant 161 : i13 | |
%c54_i13 = hw.constant 54 : i13 | |
%c0_i53 = hw.constant 0 : i53 | |
%c0_i154 = hw.constant 0 : i154 | |
%c-1_i33 = hw.constant -1 : i33 | |
%c0_i59 = hw.constant 0 : i59 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i13 = hw.constant 0 : i13 | |
%true = hw.constant true | |
%c0_i3 = hw.constant 0 : i3 | |
%c-95_i8 = hw.constant -95 : i8 | |
%c-1_i20 = hw.constant -1 : i20 | |
%c0_i8 = hw.constant 0 : i8 | |
%c-18446744073709551616_i65 = hw.constant -18446744073709551616 : i65 | |
%c0_i33 = hw.constant 0 : i33 | |
%c0_i20 = hw.constant 0 : i20 | |
%0 = comb.extract %io_a from 64 {sv.namehint = "signA"} : (i65) -> i1 | |
%1 = comb.extract %io_a from 52 {sv.namehint = "expA"} : (i65) -> i12 | |
%2 = comb.extract %io_a from 0 {sv.namehint = "fractA"} : (i65) -> i52 | |
%3 = comb.extract %io_a from 61 {sv.namehint = "io_toPostMul_highExpA"} : (i65) -> i3 | |
%4 = comb.icmp bin ne %3, %c0_i3 : i3 | |
%5 = comb.xor bin %4, %true {sv.namehint = "isZeroA"} : i1 | |
%6 = comb.concat %4, %2 {sv.namehint = "sigA"} : i1, i52 | |
%7 = comb.extract %io_b from 64 {sv.namehint = "signB"} : (i65) -> i1 | |
%8 = comb.extract %io_b from 0 {sv.namehint = "fractB"} : (i65) -> i52 | |
%9 = comb.extract %io_b from 61 {sv.namehint = "io_toPostMul_highExpB"} : (i65) -> i3 | |
%10 = comb.icmp bin ne %9, %c0_i3 : i3 | |
%11 = comb.xor bin %10, %true {sv.namehint = "isZeroB"} : i1 | |
%12 = comb.concat %10, %8 {sv.namehint = "sigB"} : i1, i52 | |
%13 = comb.extract %io_c from 64 : (i65) -> i1 | |
%14 = comb.extract %io_op from 0 : (i2) -> i1 | |
%15 = comb.xor bin %13, %14 {sv.namehint = "opSignC"} : i1 | |
%16 = comb.extract %io_c from 52 {sv.namehint = "expC"} : (i65) -> i12 | |
%17 = comb.extract %io_c from 0 {sv.namehint = "fractC"} : (i65) -> i52 | |
%18 = comb.extract %io_c from 61 {sv.namehint = "io_toPostMul_highExpC"} : (i65) -> i3 | |
%19 = comb.icmp bin ne %18, %c0_i3 : i3 | |
%20 = comb.concat %19, %17 {sv.namehint = "sigC"} : i1, i52 | |
%21 = comb.extract %io_op from 1 : (i2) -> i1 | |
%22 = comb.xor bin %0, %7, %21 {sv.namehint = "signProd"} : i1 | |
%23 = comb.or bin %5, %11 {sv.namehint = "isZeroProd"} : i1 | |
%24 = comb.extract %io_b from 63 : (i65) -> i1 | |
%25 = comb.xor bin %24, %true : i1 | |
%26 = comb.replicate %25 : (i1) -> i3 | |
%27 = comb.extract %io_b from 52 : (i65) -> i11 | |
%28 = comb.concat %c0_i2, %1 : i2, i12 | |
%29 = comb.concat %26, %27 : i3, i11 | |
%30 = comb.add %28, %29, %c56_i14 {sv.namehint = "sExpAlignedProd"} : i14 | |
%31 = comb.xor bin %22, %15 {sv.namehint = "doSubMags"} : i1 | |
%32 = comb.concat %c0_i2, %16 : i2, i12 | |
%33 = comb.sub %30, %32 : i14 | |
%34 = comb.extract %33 from 13 : (i14) -> i1 | |
%35 = comb.or bin %23, %34 {sv.namehint = "CAlignDist_floor"} : i1 | |
%36 = comb.extract %33 from 0 : (i14) -> i13 | |
%37 = comb.icmp bin eq %36, %c0_i13 : i13 | |
%38 = comb.or bin %35, %37 {sv.namehint = "CAlignDist_0"} : i1 | |
%39 = comb.icmp bin ult %36, %c54_i13 : i13 | |
%40 = comb.or bin %35, %39 : i1 | |
%41 = comb.and bin %19, %40 {sv.namehint = "isCDominant"} : i1 | |
%42 = comb.icmp bin ult %36, %c161_i13 : i13 | |
%43 = comb.extract %33 from 0 : (i14) -> i8 | |
%44 = comb.mux bin %42, %43, %c-95_i8 : i8 | |
%45 = comb.mux bin %35, %c0_i8, %44 {sv.namehint = "CAlignDist"} : i8 | |
%46 = comb.concat %c0_i2, %16 : i2, i12 | |
%47 = comb.mux bin %35, %46, %30 {sv.namehint = "sExpSum"} : i14 | |
%48 = comb.extract %45 from 7 : (i8) -> i1 | |
%49 = comb.extract %45 from 6 : (i8) -> i1 | |
%50 = comb.extract %45 from 0 : (i8) -> i6 | |
%51 = comb.concat %c0_i59, %50 : i59, i6 | |
%52 = comb.shrs bin %c-18446744073709551616_i65, %51 : i65 | |
%53 = comb.extract %52 from 35 : (i65) -> i2 | |
%54 = comb.extract %52 from 39 : (i65) -> i2 | |
%55 = comb.extract %52 from 43 : (i65) -> i2 | |
%56 = comb.extract %52 from 47 : (i65) -> i2 | |
%57 = comb.extract %52 from 51 : (i65) -> i2 | |
%58 = comb.extract %52 from 55 : (i65) -> i2 | |
%59 = comb.extract %52 from 37 : (i65) -> i2 | |
%60 = comb.concat %59, %54 : i2, i2 | |
%61 = comb.extract %52 from 41 : (i65) -> i2 | |
%62 = comb.extract %52 from 45 : (i65) -> i2 | |
%63 = comb.concat %62, %56 : i2, i2 | |
%64 = comb.extract %52 from 49 : (i65) -> i2 | |
%65 = comb.extract %52 from 53 : (i65) -> i2 | |
%66 = comb.concat %65, %58 : i2, i2 | |
%67 = comb.extract %52 from 62 : (i65) -> i1 | |
%68 = comb.extract %52 from 54 : (i65) -> i1 | |
%69 = comb.concat %53, %59, %54, %61, %55, %62, %56, %64, %57, %68 : i2, i2, i2, i2, i2, i2, i2, i2, i2, i1 | |
%70 = comb.and %69, %c-174763_i19 : i19 | |
%71 = comb.extract %52 from 31 : (i65) -> i1 | |
%72 = comb.extract %52 from 33 : (i65) -> i1 | |
%73 = comb.extract %52 from 35 : (i65) -> i1 | |
%74 = comb.and %60, %c5_i4 : i4 | |
%75 = comb.extract %52 from 41 : (i65) -> i1 | |
%76 = comb.extract %52 from 43 : (i65) -> i1 | |
%77 = comb.and %63, %c5_i4 : i4 | |
%78 = comb.extract %52 from 49 : (i65) -> i1 | |
%79 = comb.extract %52 from 51 : (i65) -> i1 | |
%80 = comb.and %66, %c5_i4 : i4 | |
%81 = comb.extract %52 from 57 : (i65) -> i1 | |
%82 = comb.extract %52 from 59 : (i65) -> i1 | |
%83 = comb.extract %52 from 61 : (i65) -> i1 | |
%84 = comb.extract %52 from 32 : (i65) -> i1 | |
%85 = comb.extract %52 from 34 : (i65) -> i1 | |
%86 = comb.extract %70 from 15 : (i19) -> i4 | |
%87 = comb.or %86, %74 : i4 | |
%88 = comb.extract %52 from 40 : (i65) -> i1 | |
%89 = comb.extract %70 from 13 : (i19) -> i1 | |
%90 = comb.or %89, %75 : i1 | |
%91 = comb.extract %52 from 42 : (i65) -> i1 | |
%92 = comb.extract %70 from 7 : (i19) -> i4 | |
%93 = comb.or %92, %77 : i4 | |
%94 = comb.extract %52 from 48 : (i65) -> i1 | |
%95 = comb.extract %70 from 5 : (i19) -> i1 | |
%96 = comb.or %95, %78 : i1 | |
%97 = comb.extract %52 from 50 : (i65) -> i1 | |
%98 = comb.extract %70 from 0 : (i19) -> i3 | |
%99 = comb.concat %98, %false : i3, i1 | |
%100 = comb.or %99, %80 : i4 | |
%101 = comb.extract %52 from 56 : (i65) -> i1 | |
%102 = comb.extract %52 from 58 : (i65) -> i1 | |
%103 = comb.extract %52 from 60 : (i65) -> i1 | |
%104 = comb.extract %52 from 63 : (i65) -> i1 | |
%105 = comb.concat %71, %84, %72, %85, %73, %87, %88, %90, %91, %76, %93, %94, %96, %97, %79, %100, %101, %81, %102, %82, %103, %83, %67, %104 : i1, i1, i1, i1, i1, i4, i1, i1, i1, i1, i4, i1, i1, i1, i1, i4, i1, i1, i1, i1, i1, i1, i1, i1 | |
%106 = comb.xor bin %105, %c-1_i33 : i33 | |
%107 = comb.mux bin %49, %c0_i33, %106 : i33 | |
%108 = comb.xor bin %107, %c-1_i33 : i33 | |
%109 = comb.concat %108, %c-1_i20 : i33, i20 | |
%110 = comb.extract %52 from 15 : (i65) -> i1 | |
%111 = comb.extract %52 from 0 : (i65) -> i1 | |
%112 = comb.extract %52 from 2 : (i65) -> i1 | |
%113 = comb.extract %52 from 4 : (i65) -> i1 | |
%114 = comb.extract %52 from 6 : (i65) -> i1 | |
%115 = comb.extract %52 from 8 : (i65) -> i1 | |
%116 = comb.extract %52 from 10 : (i65) -> i1 | |
%117 = comb.extract %52 from 12 : (i65) -> i1 | |
%118 = comb.extract %52 from 14 : (i65) -> i1 | |
%119 = comb.extract %52 from 1 : (i65) -> i1 | |
%120 = comb.extract %52 from 3 : (i65) -> i1 | |
%121 = comb.extract %52 from 5 : (i65) -> i1 | |
%122 = comb.extract %52 from 7 : (i65) -> i1 | |
%123 = comb.extract %52 from 9 : (i65) -> i1 | |
%124 = comb.extract %52 from 11 : (i65) -> i1 | |
%125 = comb.extract %52 from 13 : (i65) -> i1 | |
%126 = comb.extract %52 from 16 : (i65) -> i1 | |
%127 = comb.extract %52 from 17 : (i65) -> i1 | |
%128 = comb.extract %52 from 18 : (i65) -> i1 | |
%129 = comb.extract %52 from 19 : (i65) -> i1 | |
%130 = comb.concat %111, %119, %112, %120, %113, %121, %114, %122, %115, %123, %116, %124, %117, %125, %118, %110, %126, %127, %128, %129 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%131 = comb.mux bin %49, %130, %c0_i20 : i20 | |
%132 = comb.concat %c0_i33, %131 : i33, i20 | |
%133 = comb.mux bin %48, %109, %132 {sv.namehint = "CExtraMask"} : i53 | |
%134 = comb.replicate %31 : (i1) -> i53 | |
%135 = comb.xor %134, %20 {sv.namehint = "negSigC"} : i53 | |
%136 = comb.replicate %31 : (i1) -> i108 | |
%137 = comb.concat %31, %135, %136 : i1, i53, i108 | |
%138 = comb.concat %c0_i154, %45 : i154, i8 | |
%139 = comb.shrs bin %137, %138 : i162 | |
%140 = comb.and bin %20, %133 : i53 | |
%141 = comb.icmp bin ne %140, %c0_i53 : i53 | |
%142 = comb.xor bin %141, %31 {sv.namehint = "io_toPostMul_bit0AlignedNegSigC"} : i1 | |
%143 = comb.extract %139 from 0 {sv.namehint = "io_mulAddC"} : (i162) -> i106 | |
%144 = comb.extract %io_a from 51 {sv.namehint = "io_toPostMul_isNaN_isQuietNaNA"} : (i65) -> i1 | |
%145 = comb.extract %io_b from 51 {sv.namehint = "io_toPostMul_isNaN_isQuietNaNB"} : (i65) -> i1 | |
%146 = comb.extract %io_c from 51 {sv.namehint = "io_toPostMul_isNaN_isQuietNaNC"} : (i65) -> i1 | |
%147 = comb.extract %139 from 106 {sv.namehint = "io_toPostMul_highAlignedNegSigC"} : (i162) -> i55 | |
hw.output %6, %12, %143, %3, %144, %9, %145, %22, %23, %15, %18, %146, %41, %38, %45, %142, %147, %47, %io_roundingMode : i53, i53, i106, i3, i1, i3, i1, i1, i1, i1, i3, i1, i1, i1, i8, i1, i55, i14, i2 | |
} | |
hw.module private @MulAddRecFN_postMul_1(in %io_fromPreMul_highExpA : i3, in %io_fromPreMul_isNaN_isQuietNaNA : i1, in %io_fromPreMul_highExpB : i3, in %io_fromPreMul_isNaN_isQuietNaNB : i1, in %io_fromPreMul_signProd : i1, in %io_fromPreMul_isZeroProd : i1, in %io_fromPreMul_opSignC : i1, in %io_fromPreMul_highExpC : i3, in %io_fromPreMul_isNaN_isQuietNaNC : i1, in %io_fromPreMul_isCDominant : i1, in %io_fromPreMul_CAlignDist_0 : i1, in %io_fromPreMul_CAlignDist : i8, in %io_fromPreMul_bit0AlignedNegSigC : i1, in %io_fromPreMul_highAlignedNegSigC : i55, in %io_fromPreMul_sExpSum : i14, in %io_fromPreMul_roundingMode : i2, in %io_mulAddResult : i107, out io_out : i65, out io_exceptionFlags : i5) { | |
%c-174763_i19 = hw.constant -174763 : i19 | |
%c0_i51 = hw.constant 0 : i51 | |
%c-1_i9 = hw.constant -1 : i9 | |
%c-1_i10 = hw.constant -1 : i10 | |
%c0_i13 = hw.constant 0 : i13 | |
%c1_i13 = hw.constant 1 : i13 | |
%c-1_i54 = hw.constant -1 : i54 | |
%c5_i4 = hw.constant 5 : i4 | |
%c0_i6 = hw.constant 0 : i6 | |
%c-1_i6 = hw.constant -1 : i6 | |
%c-96_i8 = hw.constant -96 : i8 | |
%c1_i55 = hw.constant 1 : i55 | |
%c3_i3 = hw.constant 3 : i3 | |
%c-1_i12 = hw.constant -1 : i12 | |
%c0_i110 = hw.constant 0 : i110 | |
%c-1_i55 = hw.constant -1 : i55 | |
%c-1_i50 = hw.constant -1 : i50 | |
%c0_i59 = hw.constant 0 : i59 | |
%c-1_i13 = hw.constant -1 : i13 | |
%c-1_i32 = hw.constant -1 : i32 | |
%c0_i82 = hw.constant 0 : i82 | |
%c0_i28 = hw.constant 0 : i28 | |
%c-1_i5 = hw.constant -1 : i5 | |
%c0_i23 = hw.constant 0 : i23 | |
%c0_i11 = hw.constant 0 : i11 | |
%c0_i21 = hw.constant 0 : i21 | |
%c0_i76 = hw.constant 0 : i76 | |
%c-1_i162 = hw.constant -1 : i162 | |
%c0_i32 = hw.constant 0 : i32 | |
%c0_i8 = hw.constant 0 : i8 | |
%c0_i16 = hw.constant 0 : i16 | |
%c0_i44 = hw.constant 0 : i44 | |
%c0_i2 = hw.constant 0 : i2 | |
%c0_i3 = hw.constant 0 : i3 | |
%false = hw.constant false | |
%c-1_i2 = hw.constant -1 : i2 | |
%c-2_i2 = hw.constant -2 : i2 | |
%true = hw.constant true | |
%c0_i86 = hw.constant 0 : i86 | |
%c0_i22 = hw.constant 0 : i22 | |
%c0_i54 = hw.constant 0 : i54 | |
%c-1_i4 = hw.constant -1 : i4 | |
%c-1022_i11 = hw.constant -1022 : i11 | |
%c-1023_i11 = hw.constant -1023 : i11 | |
%c-512_i12 = hw.constant -512 : i12 | |
%c0_i12 = hw.constant 0 : i12 | |
%c-1025_i12 = hw.constant -1025 : i12 | |
%c-1024_i12 = hw.constant -1024 : i12 | |
%c0_i87 = hw.constant 0 : i87 | |
%c-4294967296_i33 = hw.constant -4294967296 : i33 | |
%c-18446744073709551616_i65 = hw.constant -18446744073709551616 : i65 | |
%c0_i50 = hw.constant 0 : i50 | |
%c0_i4 = hw.constant 0 : i4 | |
%c0_i55 = hw.constant 0 : i55 | |
%c-975_i12 = hw.constant -975 : i12 | |
%c974_i12 = hw.constant 974 : i12 | |
%0 = comb.icmp bin eq %io_fromPreMul_highExpA, %c0_i3 {sv.namehint = "isZeroA"} : i3 | |
%1 = comb.extract %io_fromPreMul_highExpA from 1 : (i3) -> i2 | |
%2 = comb.icmp bin eq %1, %c-1_i2 {sv.namehint = "isSpecialA"} : i2 | |
%3 = comb.extract %io_fromPreMul_highExpA from 0 : (i3) -> i1 | |
%4 = comb.xor bin %3, %true : i1 | |
%5 = comb.and bin %2, %4 {sv.namehint = "isInfA"} : i1 | |
%6 = comb.and bin %2, %3 {sv.namehint = "isNaNA"} : i1 | |
%7 = comb.xor bin %io_fromPreMul_isNaN_isQuietNaNA, %true : i1 | |
%8 = comb.and bin %6, %7 {sv.namehint = "isSigNaNA"} : i1 | |
%9 = comb.icmp bin eq %io_fromPreMul_highExpB, %c0_i3 {sv.namehint = "isZeroB"} : i3 | |
%10 = comb.extract %io_fromPreMul_highExpB from 1 : (i3) -> i2 | |
%11 = comb.icmp bin eq %10, %c-1_i2 {sv.namehint = "isSpecialB"} : i2 | |
%12 = comb.extract %io_fromPreMul_highExpB from 0 : (i3) -> i1 | |
%13 = comb.xor bin %12, %true : i1 | |
%14 = comb.and bin %11, %13 {sv.namehint = "isInfB"} : i1 | |
%15 = comb.and bin %11, %12 {sv.namehint = "isNaNB"} : i1 | |
%16 = comb.xor bin %io_fromPreMul_isNaN_isQuietNaNB, %true : i1 | |
%17 = comb.and bin %15, %16 {sv.namehint = "isSigNaNB"} : i1 | |
%18 = comb.icmp bin ne %io_fromPreMul_highExpC, %c0_i3 : i3 | |
%19 = comb.xor bin %18, %true {sv.namehint = "isZeroC"} : i1 | |
%20 = comb.extract %io_fromPreMul_highExpC from 1 : (i3) -> i2 | |
%21 = comb.icmp bin eq %20, %c-1_i2 {sv.namehint = "isSpecialC"} : i2 | |
%22 = comb.extract %io_fromPreMul_highExpC from 0 : (i3) -> i1 | |
%23 = comb.xor bin %22, %true : i1 | |
%24 = comb.and bin %21, %23 {sv.namehint = "isInfC"} : i1 | |
%25 = comb.and bin %21, %22 {sv.namehint = "isNaNC"} : i1 | |
%26 = comb.xor bin %io_fromPreMul_isNaN_isQuietNaNC, %true : i1 | |
%27 = comb.and bin %25, %26 {sv.namehint = "isSigNaNC"} : i1 | |
%28 = comb.icmp bin eq %io_fromPreMul_roundingMode, %c0_i2 {sv.namehint = "roundingMode_nearest_even"} : i2 | |
%29 = comb.icmp bin eq %io_fromPreMul_roundingMode, %c-2_i2 {sv.namehint = "signZeroNotEqOpSigns"} : i2 | |
%30 = comb.icmp bin eq %io_fromPreMul_roundingMode, %c-1_i2 {sv.namehint = "roundingMode_max"} : i2 | |
%31 = comb.xor bin %io_fromPreMul_signProd, %io_fromPreMul_opSignC {sv.namehint = "doSubMags"} : i1 | |
%32 = comb.extract %io_mulAddResult from 106 : (i107) -> i1 | |
%33 = comb.add %io_fromPreMul_highAlignedNegSigC, %c1_i55 : i55 | |
%34 = comb.mux bin %32, %33, %io_fromPreMul_highAlignedNegSigC : i55 | |
%35 = comb.extract %io_mulAddResult from 0 : (i107) -> i106 | |
%36 = comb.concat %34, %35, %io_fromPreMul_bit0AlignedNegSigC {sv.namehint = "sigSum"} : i55, i106, i1 | |
%37 = comb.extract %34 from 0 : (i55) -> i2 | |
%38 = comb.extract %io_mulAddResult from 1 : (i107) -> i105 | |
%39 = comb.concat %37, %38 : i2, i105 | |
%40 = comb.extract %34 from 0 : (i55) -> i1 | |
%41 = comb.concat %40, %35 : i1, i106 | |
%42 = comb.xor %39, %41 : i107 | |
%43 = comb.extract %42 from 63 : (i107) -> i44 | |
%44 = comb.icmp bin ne %43, %c0_i44 : i44 | |
%45 = comb.extract %42 from 95 : (i107) -> i12 | |
%46 = comb.icmp bin ne %45, %c0_i12 : i12 | |
%47 = comb.extract %42 from 103 : (i107) -> i4 | |
%48 = comb.icmp bin ne %47, %c0_i4 : i4 | |
%49 = comb.extract %42 from 106 : (i107) -> i1 | |
%50 = comb.extract %42 from 105 : (i107) -> i1 | |
%51 = comb.extract %42 from 104 : (i107) -> i1 | |
%52 = comb.concat %false, %51 : i1, i1 | |
%53 = comb.mux bin %50, %c-2_i2, %52 : i2 | |
%54 = comb.mux bin %49, %c-1_i2, %53 : i2 | |
%55 = comb.extract %42 from 99 : (i107) -> i4 | |
%56 = comb.icmp bin ne %55, %c0_i4 : i4 | |
%57 = comb.extract %42 from 102 : (i107) -> i1 | |
%58 = comb.extract %42 from 101 : (i107) -> i1 | |
%59 = comb.extract %42 from 100 : (i107) -> i1 | |
%60 = comb.concat %false, %59 : i1, i1 | |
%61 = comb.mux bin %58, %c-2_i2, %60 : i2 | |
%62 = comb.mux bin %57, %c-1_i2, %61 : i2 | |
%63 = comb.extract %42 from 98 : (i107) -> i1 | |
%64 = comb.extract %42 from 97 : (i107) -> i1 | |
%65 = comb.extract %42 from 96 : (i107) -> i1 | |
%66 = comb.concat %false, %65 : i1, i1 | |
%67 = comb.mux bin %64, %c-2_i2, %66 : i2 | |
%68 = comb.mux bin %63, %c-1_i2, %67 : i2 | |
%69 = comb.mux bin %56, %62, %68 : i2 | |
%70 = comb.concat %56, %69 : i1, i2 | |
%71 = comb.concat %false, %54 : i1, i2 | |
%72 = comb.mux bin %48, %71, %70 : i3 | |
%73 = comb.extract %42 from 79 : (i107) -> i16 | |
%74 = comb.icmp bin ne %73, %c0_i16 : i16 | |
%75 = comb.extract %42 from 87 : (i107) -> i8 | |
%76 = comb.icmp bin ne %75, %c0_i8 : i8 | |
%77 = comb.extract %42 from 91 : (i107) -> i4 | |
%78 = comb.icmp bin ne %77, %c0_i4 : i4 | |
%79 = comb.extract %42 from 94 : (i107) -> i1 | |
%80 = comb.extract %42 from 93 : (i107) -> i1 | |
%81 = comb.extract %42 from 92 : (i107) -> i1 | |
%82 = comb.concat %false, %81 : i1, i1 | |
%83 = comb.mux bin %80, %c-2_i2, %82 : i2 | |
%84 = comb.mux bin %79, %c-1_i2, %83 : i2 | |
%85 = comb.extract %42 from 90 : (i107) -> i1 | |
%86 = comb.extract %42 from 89 : (i107) -> i1 | |
%87 = comb.extract %42 from 88 : (i107) -> i1 | |
%88 = comb.concat %false, %87 : i1, i1 | |
%89 = comb.mux bin %86, %c-2_i2, %88 : i2 | |
%90 = comb.mux bin %85, %c-1_i2, %89 : i2 | |
%91 = comb.mux bin %78, %84, %90 : i2 | |
%92 = comb.concat %78, %91 : i1, i2 | |
%93 = comb.extract %42 from 83 : (i107) -> i4 | |
%94 = comb.icmp bin ne %93, %c0_i4 : i4 | |
%95 = comb.extract %42 from 86 : (i107) -> i1 | |
%96 = comb.extract %42 from 85 : (i107) -> i1 | |
%97 = comb.extract %42 from 84 : (i107) -> i1 | |
%98 = comb.concat %false, %97 : i1, i1 | |
%99 = comb.mux bin %96, %c-2_i2, %98 : i2 | |
%100 = comb.mux bin %95, %c-1_i2, %99 : i2 | |
%101 = comb.extract %42 from 82 : (i107) -> i1 | |
%102 = comb.extract %42 from 81 : (i107) -> i1 | |
%103 = comb.extract %42 from 80 : (i107) -> i1 | |
%104 = comb.concat %false, %103 : i1, i1 | |
%105 = comb.mux bin %102, %c-2_i2, %104 : i2 | |
%106 = comb.mux bin %101, %c-1_i2, %105 : i2 | |
%107 = comb.mux bin %94, %100, %106 : i2 | |
%108 = comb.concat %94, %107 : i1, i2 | |
%109 = comb.mux bin %76, %92, %108 : i3 | |
%110 = comb.concat %76, %109 : i1, i3 | |
%111 = comb.extract %42 from 71 : (i107) -> i8 | |
%112 = comb.icmp bin ne %111, %c0_i8 : i8 | |
%113 = comb.extract %42 from 75 : (i107) -> i4 | |
%114 = comb.icmp bin ne %113, %c0_i4 : i4 | |
%115 = comb.extract %42 from 78 : (i107) -> i1 | |
%116 = comb.extract %42 from 77 : (i107) -> i1 | |
%117 = comb.extract %42 from 76 : (i107) -> i1 | |
%118 = comb.concat %false, %117 : i1, i1 | |
%119 = comb.mux bin %116, %c-2_i2, %118 : i2 | |
%120 = comb.mux bin %115, %c-1_i2, %119 : i2 | |
%121 = comb.extract %42 from 74 : (i107) -> i1 | |
%122 = comb.extract %42 from 73 : (i107) -> i1 | |
%123 = comb.extract %42 from 72 : (i107) -> i1 | |
%124 = comb.concat %false, %123 : i1, i1 | |
%125 = comb.mux bin %122, %c-2_i2, %124 : i2 | |
%126 = comb.mux bin %121, %c-1_i2, %125 : i2 | |
%127 = comb.mux bin %114, %120, %126 : i2 | |
%128 = comb.concat %114, %127 : i1, i2 | |
%129 = comb.extract %42 from 67 : (i107) -> i4 | |
%130 = comb.icmp bin ne %129, %c0_i4 : i4 | |
%131 = comb.extract %42 from 70 : (i107) -> i1 | |
%132 = comb.extract %42 from 69 : (i107) -> i1 | |
%133 = comb.extract %42 from 68 : (i107) -> i1 | |
%134 = comb.concat %false, %133 : i1, i1 | |
%135 = comb.mux bin %132, %c-2_i2, %134 : i2 | |
%136 = comb.mux bin %131, %c-1_i2, %135 : i2 | |
%137 = comb.extract %42 from 66 : (i107) -> i1 | |
%138 = comb.extract %42 from 65 : (i107) -> i1 | |
%139 = comb.extract %42 from 64 : (i107) -> i1 | |
%140 = comb.concat %false, %139 : i1, i1 | |
%141 = comb.mux bin %138, %c-2_i2, %140 : i2 | |
%142 = comb.mux bin %137, %c-1_i2, %141 : i2 | |
%143 = comb.mux bin %130, %136, %142 : i2 | |
%144 = comb.concat %130, %143 : i1, i2 | |
%145 = comb.mux bin %112, %128, %144 : i3 | |
%146 = comb.concat %112, %145 : i1, i3 | |
%147 = comb.mux bin %74, %110, %146 : i4 | |
%148 = comb.concat %74, %147 : i1, i4 | |
%149 = comb.concat %false, %48, %72 : i1, i1, i3 | |
%150 = comb.mux bin %46, %149, %148 : i5 | |
%151 = comb.concat %46, %150 : i1, i5 | |
%152 = comb.extract %42 from 31 : (i107) -> i32 | |
%153 = comb.icmp bin ne %152, %c0_i32 : i32 | |
%154 = comb.extract %42 from 47 : (i107) -> i16 | |
%155 = comb.icmp bin ne %154, %c0_i16 : i16 | |
%156 = comb.extract %42 from 55 : (i107) -> i8 | |
%157 = comb.icmp bin ne %156, %c0_i8 : i8 | |
%158 = comb.extract %42 from 59 : (i107) -> i4 | |
%159 = comb.icmp bin ne %158, %c0_i4 : i4 | |
%160 = comb.extract %42 from 62 : (i107) -> i1 | |
%161 = comb.extract %42 from 61 : (i107) -> i1 | |
%162 = comb.extract %42 from 60 : (i107) -> i1 | |
%163 = comb.concat %false, %162 : i1, i1 | |
%164 = comb.mux bin %161, %c-2_i2, %163 : i2 | |
%165 = comb.mux bin %160, %c-1_i2, %164 : i2 | |
%166 = comb.extract %42 from 58 : (i107) -> i1 | |
%167 = comb.extract %42 from 57 : (i107) -> i1 | |
%168 = comb.extract %42 from 56 : (i107) -> i1 | |
%169 = comb.concat %false, %168 : i1, i1 | |
%170 = comb.mux bin %167, %c-2_i2, %169 : i2 | |
%171 = comb.mux bin %166, %c-1_i2, %170 : i2 | |
%172 = comb.mux bin %159, %165, %171 : i2 | |
%173 = comb.concat %159, %172 : i1, i2 | |
%174 = comb.extract %42 from 51 : (i107) -> i4 | |
%175 = comb.icmp bin ne %174, %c0_i4 : i4 | |
%176 = comb.extract %42 from 54 : (i107) -> i1 | |
%177 = comb.extract %42 from 53 : (i107) -> i1 | |
%178 = comb.extract %42 from 52 : (i107) -> i1 | |
%179 = comb.concat %false, %178 : i1, i1 | |
%180 = comb.mux bin %177, %c-2_i2, %179 : i2 | |
%181 = comb.mux bin %176, %c-1_i2, %180 : i2 | |
%182 = comb.extract %42 from 50 : (i107) -> i1 | |
%183 = comb.extract %42 from 49 : (i107) -> i1 | |
%184 = comb.extract %42 from 48 : (i107) -> i1 | |
%185 = comb.concat %false, %184 : i1, i1 | |
%186 = comb.mux bin %183, %c-2_i2, %185 : i2 | |
%187 = comb.mux bin %182, %c-1_i2, %186 : i2 | |
%188 = comb.mux bin %175, %181, %187 : i2 | |
%189 = comb.concat %175, %188 : i1, i2 | |
%190 = comb.mux bin %157, %173, %189 : i3 | |
%191 = comb.concat %157, %190 : i1, i3 | |
%192 = comb.extract %42 from 39 : (i107) -> i8 | |
%193 = comb.icmp bin ne %192, %c0_i8 : i8 | |
%194 = comb.extract %42 from 43 : (i107) -> i4 | |
%195 = comb.icmp bin ne %194, %c0_i4 : i4 | |
%196 = comb.extract %42 from 46 : (i107) -> i1 | |
%197 = comb.extract %42 from 45 : (i107) -> i1 | |
%198 = comb.extract %42 from 44 : (i107) -> i1 | |
%199 = comb.concat %false, %198 : i1, i1 | |
%200 = comb.mux bin %197, %c-2_i2, %199 : i2 | |
%201 = comb.mux bin %196, %c-1_i2, %200 : i2 | |
%202 = comb.extract %42 from 42 : (i107) -> i1 | |
%203 = comb.extract %42 from 41 : (i107) -> i1 | |
%204 = comb.extract %42 from 40 : (i107) -> i1 | |
%205 = comb.concat %false, %204 : i1, i1 | |
%206 = comb.mux bin %203, %c-2_i2, %205 : i2 | |
%207 = comb.mux bin %202, %c-1_i2, %206 : i2 | |
%208 = comb.mux bin %195, %201, %207 : i2 | |
%209 = comb.concat %195, %208 : i1, i2 | |
%210 = comb.extract %42 from 35 : (i107) -> i4 | |
%211 = comb.icmp bin ne %210, %c0_i4 : i4 | |
%212 = comb.extract %42 from 38 : (i107) -> i1 | |
%213 = comb.extract %42 from 37 : (i107) -> i1 | |
%214 = comb.extract %42 from 36 : (i107) -> i1 | |
%215 = comb.concat %false, %214 : i1, i1 | |
%216 = comb.mux bin %213, %c-2_i2, %215 : i2 | |
%217 = comb.mux bin %212, %c-1_i2, %216 : i2 | |
%218 = comb.extract %42 from 34 : (i107) -> i1 | |
%219 = comb.extract %42 from 33 : (i107) -> i1 | |
%220 = comb.extract %42 from 32 : (i107) -> i1 | |
%221 = comb.concat %false, %220 : i1, i1 | |
%222 = comb.mux bin %219, %c-2_i2, %221 : i2 | |
%223 = comb.mux bin %218, %c-1_i2, %222 : i2 | |
%224 = comb.mux bin %211, %217, %223 : i2 | |
%225 = comb.concat %211, %224 : i1, i2 | |
%226 = comb.mux bin %193, %209, %225 : i3 | |
%227 = comb.concat %193, %226 : i1, i3 | |
%228 = comb.mux bin %155, %191, %227 : i4 | |
%229 = comb.concat %155, %228 : i1, i4 | |
%230 = comb.extract %42 from 15 : (i107) -> i16 | |
%231 = comb.icmp bin ne %230, %c0_i16 : i16 | |
%232 = comb.extract %42 from 23 : (i107) -> i8 | |
%233 = comb.icmp bin ne %232, %c0_i8 : i8 | |
%234 = comb.extract %42 from 27 : (i107) -> i4 | |
%235 = comb.icmp bin ne %234, %c0_i4 : i4 | |
%236 = comb.extract %42 from 30 : (i107) -> i1 | |
%237 = comb.extract %42 from 29 : (i107) -> i1 | |
%238 = comb.extract %42 from 28 : (i107) -> i1 | |
%239 = comb.concat %false, %238 : i1, i1 | |
%240 = comb.mux bin %237, %c-2_i2, %239 : i2 | |
%241 = comb.mux bin %236, %c-1_i2, %240 : i2 | |
%242 = comb.extract %42 from 26 : (i107) -> i1 | |
%243 = comb.extract %42 from 25 : (i107) -> i1 | |
%244 = comb.extract %42 from 24 : (i107) -> i1 | |
%245 = comb.concat %false, %244 : i1, i1 | |
%246 = comb.mux bin %243, %c-2_i2, %245 : i2 | |
%247 = comb.mux bin %242, %c-1_i2, %246 : i2 | |
%248 = comb.mux bin %235, %241, %247 : i2 | |
%249 = comb.concat %235, %248 : i1, i2 | |
%250 = comb.extract %42 from 19 : (i107) -> i4 | |
%251 = comb.icmp bin ne %250, %c0_i4 : i4 | |
%252 = comb.extract %42 from 22 : (i107) -> i1 | |
%253 = comb.extract %42 from 21 : (i107) -> i1 | |
%254 = comb.extract %42 from 20 : (i107) -> i1 | |
%255 = comb.concat %false, %254 : i1, i1 | |
%256 = comb.mux bin %253, %c-2_i2, %255 : i2 | |
%257 = comb.mux bin %252, %c-1_i2, %256 : i2 | |
%258 = comb.extract %42 from 18 : (i107) -> i1 | |
%259 = comb.extract %42 from 17 : (i107) -> i1 | |
%260 = comb.extract %42 from 16 : (i107) -> i1 | |
%261 = comb.concat %false, %260 : i1, i1 | |
%262 = comb.mux bin %259, %c-2_i2, %261 : i2 | |
%263 = comb.mux bin %258, %c-1_i2, %262 : i2 | |
%264 = comb.mux bin %251, %257, %263 : i2 | |
%265 = comb.concat %251, %264 : i1, i2 | |
%266 = comb.mux bin %233, %249, %265 : i3 | |
%267 = comb.concat %233, %266 : i1, i3 | |
%268 = comb.extract %42 from 7 : (i107) -> i8 | |
%269 = comb.icmp bin ne %268, %c0_i8 : i8 | |
%270 = comb.extract %42 from 11 : (i107) -> i4 | |
%271 = comb.icmp bin ne %270, %c0_i4 : i4 | |
%272 = comb.extract %42 from 14 : (i107) -> i1 | |
%273 = comb.extract %42 from 13 : (i107) -> i1 | |
%274 = comb.extract %42 from 12 : (i107) -> i1 | |
%275 = comb.concat %false, %274 : i1, i1 | |
%276 = comb.mux bin %273, %c-2_i2, %275 : i2 | |
%277 = comb.mux bin %272, %c-1_i2, %276 : i2 | |
%278 = comb.extract %42 from 10 : (i107) -> i1 | |
%279 = comb.extract %42 from 9 : (i107) -> i1 | |
%280 = comb.extract %42 from 8 : (i107) -> i1 | |
%281 = comb.concat %false, %280 : i1, i1 | |
%282 = comb.mux bin %279, %c-2_i2, %281 : i2 | |
%283 = comb.mux bin %278, %c-1_i2, %282 : i2 | |
%284 = comb.mux bin %271, %277, %283 : i2 | |
%285 = comb.concat %271, %284 : i1, i2 | |
%286 = comb.extract %42 from 3 : (i107) -> i4 | |
%287 = comb.icmp bin ne %286, %c0_i4 : i4 | |
%288 = comb.extract %42 from 6 : (i107) -> i1 | |
%289 = comb.extract %42 from 5 : (i107) -> i1 | |
%290 = comb.extract %42 from 4 : (i107) -> i1 | |
%291 = comb.concat %false, %290 : i1, i1 | |
%292 = comb.mux bin %289, %c-2_i2, %291 : i2 | |
%293 = comb.mux bin %288, %c-1_i2, %292 : i2 | |
%294 = comb.extract %42 from 2 : (i107) -> i1 | |
%295 = comb.extract %42 from 1 : (i107) -> i1 | |
%296 = comb.extract %42 from 0 : (i107) -> i1 | |
%297 = comb.concat %false, %296 : i1, i1 | |
%298 = comb.mux bin %295, %c-2_i2, %297 : i2 | |
%299 = comb.mux bin %294, %c-1_i2, %298 : i2 | |
%300 = comb.mux bin %287, %293, %299 : i2 | |
%301 = comb.concat %287, %300 : i1, i2 | |
%302 = comb.mux bin %269, %285, %301 : i3 | |
%303 = comb.concat %269, %302 : i1, i3 | |
%304 = comb.mux bin %231, %267, %303 : i4 | |
%305 = comb.concat %231, %304 : i1, i4 | |
%306 = comb.mux bin %153, %229, %305 : i5 | |
%307 = comb.concat %153, %306 : i1, i5 | |
%308 = comb.mux bin %44, %151, %307 : i6 | |
%309 = comb.concat %false, %44, %308 : i1, i1, i6 | |
%310 = comb.sub %c-96_i8, %309 {sv.namehint = "estNormNeg_dist"} : i8 | |
%311 = comb.extract %io_mulAddResult from 0 : (i107) -> i43 | |
%312 = comb.concat %311, %io_fromPreMul_bit0AlignedNegSigC : i43, i1 | |
%313 = comb.icmp bin ne %312, %c0_i44 : i44 | |
%314 = comb.xor bin %36, %c-1_i162 {sv.namehint = "complSigSum"} : i162 | |
%315 = comb.extract %314 from 0 : (i162) -> i44 | |
%316 = comb.icmp bin ne %315, %c0_i44 : i44 | |
%317 = comb.or bin %io_fromPreMul_CAlignDist_0, %31 : i1 | |
%318 = comb.extract %io_fromPreMul_CAlignDist from 0 : (i8) -> i6 | |
%319 = comb.add %318, %c-1_i6 : i6 | |
%320 = comb.concat %c0_i2, %319 : i2, i6 | |
%321 = comb.mux bin %317, %io_fromPreMul_CAlignDist, %320 {sv.namehint = "CDom_estNormDist"} : i8 | |
%322 = comb.xor bin %31, %true : i1 | |
%323 = comb.extract %321 from 5 : (i8) -> i1 | |
%324 = comb.xor bin %323, %true : i1 | |
%325 = comb.extract %io_mulAddResult from 75 : (i107) -> i31 | |
%326 = comb.extract %io_mulAddResult from 0 : (i107) -> i75 | |
%327 = comb.concat %326, %io_fromPreMul_bit0AlignedNegSigC : i75, i1 | |
%328 = comb.icmp bin ne %327, %c0_i76 : i76 | |
%329 = comb.concat %34, %325, %328 : i55, i31, i1 | |
%330 = comb.or %31, %323 : i1 | |
%331 = comb.mux bin %330, %c0_i87, %329 : i87 | |
%332 = comb.and bin %322, %323 : i1 | |
%333 = comb.extract %io_mulAddResult from 43 : (i107) -> i63 | |
%334 = comb.extract %34 from 0 : (i55) -> i23 | |
%335 = comb.concat %334, %333, %313 : i23, i63, i1 | |
%336 = comb.mux bin %332, %335, %c0_i87 : i87 | |
%337 = comb.and bin %31, %324 : i1 | |
%338 = comb.extract %314 from 76 : (i162) -> i86 | |
%339 = comb.extract %314 from 0 : (i162) -> i76 | |
%340 = comb.icmp bin ne %339, %c0_i76 : i76 | |
%341 = comb.concat %338, %340 : i86, i1 | |
%342 = comb.mux bin %337, %341, %c0_i87 : i87 | |
%343 = comb.and bin %31, %323 : i1 | |
%344 = comb.extract %314 from 44 : (i162) -> i86 | |
%345 = comb.concat %344, %316 : i86, i1 | |
%346 = comb.mux bin %343, %345, %c0_i87 : i87 | |
%347 = comb.or bin %331, %336, %342, %346 {sv.namehint = "CDom_firstNormAbsSigSum"} : i87 | |
%348 = comb.extract %io_mulAddResult from 43 : (i107) -> i63 | |
%349 = comb.extract %34 from 0 : (i55) -> i2 | |
%350 = comb.xor bin %316, %true : i1 | |
%351 = comb.mux bin %31, %350, %313 : i1 | |
%352 = comb.extract %310 from 4 : (i8) -> i1 | |
%353 = comb.extract %io_mulAddResult from 0 : (i107) -> i1 | |
%354 = comb.replicate %31 : (i1) -> i86 | |
%355 = comb.concat %353, %354 : i1, i86 | |
%356 = comb.concat %c0_i21, %349, %348, %351 : i21, i2, i63, i1 | |
%357 = comb.mux bin %352, %356, %355 : i87 | |
%358 = comb.extract %io_mulAddResult from 11 : (i107) -> i86 | |
%359 = comb.extract %314 from 1 : (i162) -> i11 | |
%360 = comb.icmp bin ne %359, %c0_i11 : i11 | |
%361 = comb.xor bin %360, %true : i1 | |
%362 = comb.extract %io_mulAddResult from 0 : (i107) -> i11 | |
%363 = comb.icmp bin ne %362, %c0_i11 : i11 | |
%364 = comb.mux bin %31, %361, %363 : i1 | |
%365 = comb.concat %358, %364 : i86, i1 | |
%366 = comb.extract %310 from 6 : (i8) -> i1 | |
%367 = comb.extract %310 from 5 : (i8) -> i1 | |
%368 = comb.extract %io_mulAddResult from 0 : (i107) -> i65 | |
%369 = comb.replicate %31 : (i1) -> i22 | |
%370 = comb.concat %368, %369 : i65, i22 | |
%371 = comb.mux bin %367, %370, %365 : i87 | |
%372 = comb.extract %io_mulAddResult from 0 : (i107) -> i33 | |
%373 = comb.replicate %31 : (i1) -> i54 | |
%374 = comb.concat %372, %373 : i33, i54 | |
%375 = comb.mux bin %367, %357, %374 : i87 | |
%376 = comb.mux bin %366, %371, %375 {sv.namehint = "notCDom_pos_firstNormAbsSigSum"} : i87 | |
%377 = comb.extract %314 from 44 : (i162) -> i64 | |
%378 = comb.extract %314 from 1 : (i162) -> i2 | |
%379 = comb.concat %378, %c0_i86 : i2, i86 | |
%380 = comb.concat %c0_i23, %377, %316 : i23, i64, i1 | |
%381 = comb.mux bin %352, %380, %379 : i88 | |
%382 = comb.extract %314 from 12 : (i162) -> i87 | |
%383 = comb.concat %382, %360 : i87, i1 | |
%384 = comb.extract %314 from 1 : (i162) -> i66 | |
%385 = comb.concat %384, %c0_i22 : i66, i22 | |
%386 = comb.mux bin %367, %385, %383 : i88 | |
%387 = comb.extract %314 from 1 : (i162) -> i34 | |
%388 = comb.concat %387, %c0_i54 : i34, i54 | |
%389 = comb.mux bin %367, %381, %388 : i88 | |
%390 = comb.mux bin %366, %386, %389 {sv.namehint = "notCDom_neg_cFirstNormAbsSigSum"} : i88 | |
%391 = comb.extract %34 from 2 {sv.namehint = "notCDom_signSigSum"} : (i55) -> i1 | |
%392 = comb.and bin %31, %18 : i1 | |
%393 = comb.mux bin %io_fromPreMul_isCDominant, %392, %391 {sv.namehint = "doNegSignSum"} : i1 | |
%394 = comb.mux bin %io_fromPreMul_isCDominant, %321, %310 {sv.namehint = "estNormDist"} : i8 | |
%395 = comb.concat %false, %347 : i1, i87 | |
%396 = comb.mux bin %io_fromPreMul_isCDominant, %395, %390 : i88 | |
%397 = comb.mux bin %io_fromPreMul_isCDominant, %347, %376 : i87 | |
%398 = comb.concat %false, %397 : i1, i87 | |
%399 = comb.mux bin %391, %396, %398 {sv.namehint = "cFirstNormAbsSigSum"} : i88 | |
%400 = comb.xor bin %io_fromPreMul_isCDominant, %true : i1 | |
%401 = comb.xor bin %391, %true : i1 | |
%402 = comb.and bin %400, %401, %31 {sv.namehint = "doIncrSig"} : i1 | |
%403 = comb.extract %394 from 0 {sv.namehint = "estNormDist_5"} : (i8) -> i5 | |
%404 = comb.xor bin %403, %c-1_i5 {sv.namehint = "normTo2ShiftDist"} : i5 | |
%405 = comb.concat %c0_i28, %404 : i28, i5 | |
%406 = comb.shrs bin %c-4294967296_i33, %405 : i33 | |
%407 = comb.extract %406 from 16 : (i33) -> i1 | |
%408 = comb.extract %406 from 1 : (i33) -> i1 | |
%409 = comb.extract %406 from 3 : (i33) -> i1 | |
%410 = comb.extract %406 from 5 : (i33) -> i1 | |
%411 = comb.extract %406 from 7 : (i33) -> i1 | |
%412 = comb.extract %406 from 9 : (i33) -> i1 | |
%413 = comb.extract %406 from 11 : (i33) -> i1 | |
%414 = comb.extract %406 from 13 : (i33) -> i1 | |
%415 = comb.extract %406 from 15 : (i33) -> i1 | |
%416 = comb.extract %406 from 2 : (i33) -> i1 | |
%417 = comb.extract %406 from 4 : (i33) -> i1 | |
%418 = comb.extract %406 from 6 : (i33) -> i1 | |
%419 = comb.extract %406 from 8 : (i33) -> i1 | |
%420 = comb.extract %406 from 10 : (i33) -> i1 | |
%421 = comb.extract %406 from 12 : (i33) -> i1 | |
%422 = comb.extract %406 from 14 : (i33) -> i1 | |
%423 = comb.extract %406 from 24 : (i33) -> i1 | |
%424 = comb.extract %406 from 17 : (i33) -> i1 | |
%425 = comb.extract %406 from 19 : (i33) -> i1 | |
%426 = comb.extract %406 from 21 : (i33) -> i1 | |
%427 = comb.extract %406 from 23 : (i33) -> i1 | |
%428 = comb.extract %406 from 18 : (i33) -> i1 | |
%429 = comb.extract %406 from 20 : (i33) -> i1 | |
%430 = comb.extract %406 from 22 : (i33) -> i1 | |
%431 = comb.extract %406 from 25 : (i33) -> i1 | |
%432 = comb.extract %406 from 26 : (i33) -> i1 | |
%433 = comb.extract %406 from 27 : (i33) -> i1 | |
%434 = comb.extract %406 from 28 : (i33) -> i1 | |
%435 = comb.extract %406 from 29 : (i33) -> i1 | |
%436 = comb.extract %406 from 30 : (i33) -> i1 | |
%437 = comb.extract %406 from 31 : (i33) -> i1 | |
%438 = comb.concat %408, %416, %409, %417, %410, %418, %411, %419, %412, %420, %413, %421, %414, %422, %415, %407, %424, %428, %425, %429, %426, %430, %427, %423, %431, %432, %433, %434, %435, %436, %437, %true {sv.namehint = "absSigSumExtraMask"} : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%439 = comb.extract %399 from 1 : (i88) -> i87 | |
%440 = comb.concat %c0_i82, %404 : i82, i5 | |
%441 = comb.shru bin %439, %440 : i87 | |
%442 = comb.extract %399 from 0 : (i88) -> i32 | |
%443 = comb.xor bin %442, %c-1_i32 : i32 | |
%444 = comb.and bin %443, %438 : i32 | |
%445 = comb.icmp bin eq %444, %c0_i32 : i32 | |
%446 = comb.and bin %442, %438 : i32 | |
%447 = comb.icmp bin ne %446, %c0_i32 : i32 | |
%448 = comb.mux bin %402, %445, %447 : i1 | |
%449 = comb.extract %441 from 54 : (i87) -> i2 | |
%450 = comb.icmp bin eq %449, %c0_i2 {sv.namehint = "sigX3Shift1"} : i2 | |
%451 = comb.concat %c0_i6, %394 : i6, i8 | |
%452 = comb.sub %io_fromPreMul_sExpSum, %451 {sv.namehint = "sExpX3"} : i14 | |
%453 = comb.extract %441 from 53 : (i87) -> i3 | |
%454 = comb.icmp bin ne %453, %c0_i3 : i3 | |
%455 = comb.xor bin %454, %true {sv.namehint = "isZeroY"} : i1 | |
%456 = comb.xor bin %io_fromPreMul_signProd, %393 : i1 | |
%457 = comb.mux bin %454, %456, %29 {sv.namehint = "signY"} : i1 | |
%458 = comb.extract %452 from 0 {sv.namehint = "sExpX3_13"} : (i14) -> i13 | |
%459 = comb.extract %452 from 13 : (i14) -> i1 | |
%460 = comb.replicate %459 : (i1) -> i56 | |
%461 = comb.xor bin %458, %c-1_i13 : i13 | |
%462 = comb.extract %461 from 12 : (i13) -> i1 | |
%463 = comb.extract %461 from 11 : (i13) -> i1 | |
%464 = comb.extract %461 from 10 : (i13) -> i1 | |
%465 = comb.extract %461 from 9 : (i13) -> i1 | |
%466 = comb.extract %461 from 8 : (i13) -> i1 | |
%467 = comb.extract %461 from 7 : (i13) -> i1 | |
%468 = comb.extract %461 from 6 : (i13) -> i1 | |
%469 = comb.extract %461 from 0 : (i13) -> i6 | |
%470 = comb.concat %c0_i59, %469 : i59, i6 | |
%471 = comb.shrs bin %c-18446744073709551616_i65, %470 : i65 | |
%472 = comb.extract %471 from 18 : (i65) -> i2 | |
%473 = comb.extract %471 from 22 : (i65) -> i2 | |
%474 = comb.extract %471 from 26 : (i65) -> i2 | |
%475 = comb.extract %471 from 30 : (i65) -> i2 | |
%476 = comb.extract %471 from 34 : (i65) -> i2 | |
%477 = comb.extract %471 from 38 : (i65) -> i2 | |
%478 = comb.extract %471 from 20 : (i65) -> i2 | |
%479 = comb.concat %478, %473 : i2, i2 | |
%480 = comb.extract %471 from 24 : (i65) -> i2 | |
%481 = comb.extract %471 from 28 : (i65) -> i2 | |
%482 = comb.concat %481, %475 : i2, i2 | |
%483 = comb.extract %471 from 32 : (i65) -> i2 | |
%484 = comb.extract %471 from 36 : (i65) -> i2 | |
%485 = comb.concat %484, %477 : i2, i2 | |
%486 = comb.extract %471 from 45 : (i65) -> i1 | |
%487 = comb.extract %471 from 37 : (i65) -> i1 | |
%488 = comb.concat %472, %478, %473, %480, %474, %481, %475, %483, %476, %487 : i2, i2, i2, i2, i2, i2, i2, i2, i2, i1 | |
%489 = comb.and %488, %c-174763_i19 : i19 | |
%490 = comb.extract %471 from 14 : (i65) -> i1 | |
%491 = comb.extract %471 from 16 : (i65) -> i1 | |
%492 = comb.extract %471 from 18 : (i65) -> i1 | |
%493 = comb.and %479, %c5_i4 : i4 | |
%494 = comb.extract %471 from 24 : (i65) -> i1 | |
%495 = comb.extract %471 from 26 : (i65) -> i1 | |
%496 = comb.and %482, %c5_i4 : i4 | |
%497 = comb.extract %471 from 32 : (i65) -> i1 | |
%498 = comb.extract %471 from 34 : (i65) -> i1 | |
%499 = comb.and %485, %c5_i4 : i4 | |
%500 = comb.extract %471 from 40 : (i65) -> i1 | |
%501 = comb.extract %471 from 42 : (i65) -> i1 | |
%502 = comb.extract %471 from 44 : (i65) -> i1 | |
%503 = comb.extract %471 from 15 : (i65) -> i1 | |
%504 = comb.extract %471 from 17 : (i65) -> i1 | |
%505 = comb.extract %489 from 15 : (i19) -> i4 | |
%506 = comb.or %505, %493 : i4 | |
%507 = comb.extract %471 from 23 : (i65) -> i1 | |
%508 = comb.extract %489 from 13 : (i19) -> i1 | |
%509 = comb.or %508, %494 : i1 | |
%510 = comb.extract %471 from 25 : (i65) -> i1 | |
%511 = comb.extract %489 from 7 : (i19) -> i4 | |
%512 = comb.or %511, %496 : i4 | |
%513 = comb.extract %471 from 31 : (i65) -> i1 | |
%514 = comb.extract %489 from 5 : (i19) -> i1 | |
%515 = comb.or %514, %497 : i1 | |
%516 = comb.extract %471 from 33 : (i65) -> i1 | |
%517 = comb.extract %489 from 0 : (i19) -> i3 | |
%518 = comb.concat %517, %false : i3, i1 | |
%519 = comb.or %518, %499 : i4 | |
%520 = comb.extract %471 from 39 : (i65) -> i1 | |
%521 = comb.extract %471 from 41 : (i65) -> i1 | |
%522 = comb.extract %471 from 43 : (i65) -> i1 | |
%523 = comb.extract %471 from 61 : (i65) -> i1 | |
%524 = comb.extract %471 from 46 : (i65) -> i1 | |
%525 = comb.extract %471 from 48 : (i65) -> i1 | |
%526 = comb.extract %471 from 50 : (i65) -> i1 | |
%527 = comb.extract %471 from 52 : (i65) -> i1 | |
%528 = comb.extract %471 from 54 : (i65) -> i1 | |
%529 = comb.extract %471 from 56 : (i65) -> i1 | |
%530 = comb.extract %471 from 58 : (i65) -> i1 | |
%531 = comb.extract %471 from 60 : (i65) -> i1 | |
%532 = comb.extract %471 from 47 : (i65) -> i1 | |
%533 = comb.extract %471 from 49 : (i65) -> i1 | |
%534 = comb.extract %471 from 51 : (i65) -> i1 | |
%535 = comb.extract %471 from 53 : (i65) -> i1 | |
%536 = comb.extract %471 from 55 : (i65) -> i1 | |
%537 = comb.extract %471 from 57 : (i65) -> i1 | |
%538 = comb.extract %471 from 59 : (i65) -> i1 | |
%539 = comb.extract %471 from 62 : (i65) -> i1 | |
%540 = comb.extract %471 from 63 : (i65) -> i1 | |
%541 = comb.concat %490, %503, %491, %504, %492, %506, %507, %509, %510, %495, %512, %513, %515, %516, %498, %519, %520, %500, %521, %501, %522, %502, %486, %524, %532, %525, %533, %526, %534, %527, %535, %528, %536, %529, %537, %530, %538, %531, %523, %539, %540 : i1, i1, i1, i1, i1, i4, i1, i1, i1, i1, i4, i1, i1, i1, i1, i4, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1 | |
%542 = comb.xor bin %541, %c-1_i50 : i50 | |
%543 = comb.or bin %465, %466, %467, %468 : i1 | |
%544 = comb.mux bin %543, %c0_i50, %542 : i50 | |
%545 = comb.xor bin %544, %c-1_i50 : i50 | |
%546 = comb.concat %545, %c-1_i4 : i50, i4 | |
%547 = comb.extract %471 from 0 : (i65) -> i1 | |
%548 = comb.extract %471 from 1 : (i65) -> i1 | |
%549 = comb.extract %471 from 2 : (i65) -> i1 | |
%550 = comb.extract %471 from 3 : (i65) -> i1 | |
%551 = comb.concat %547, %548, %549, %550 : i1, i1, i1, i1 | |
%552 = comb.and bin %465, %466, %467, %468 : i1 | |
%553 = comb.mux bin %552, %551, %c0_i4 : i4 | |
%554 = comb.concat %c0_i50, %553 : i50, i4 | |
%555 = comb.mux bin %464, %546, %554 : i54 | |
%556 = comb.and bin %462, %463 : i1 | |
%557 = comb.mux bin %556, %555, %c0_i54 : i54 | |
%558 = comb.extract %441 from 54 : (i87) -> i1 | |
%559 = comb.extract %557 from 1 : (i54) -> i53 | |
%560 = comb.extract %557 from 0 : (i54) -> i1 | |
%561 = comb.or bin %560, %558 : i1 | |
%562 = comb.concat %559, %561, %c-1_i2 : i53, i1, i2 | |
%563 = comb.or bin %460, %562 {sv.namehint = "roundMask"} : i56 | |
%564 = comb.extract %563 from 1 : (i56) -> i55 | |
%565 = comb.xor bin %564, %c-1_i55 : i55 | |
%566 = comb.extract %563 from 0 : (i56) -> i55 | |
%567 = comb.extract %441 from 0 : (i87) -> i54 | |
%568 = comb.concat %567, %448 : i54, i1 | |
%569 = comb.and bin %568, %566, %565 : i55 | |
%570 = comb.icmp bin ne %569, %c0_i55 {sv.namehint = "roundPosBit"} : i55 | |
%571 = comb.and bin %568, %564 : i55 | |
%572 = comb.icmp bin ne %571, %c0_i55 {sv.namehint = "anyRoundExtra"} : i55 | |
%573 = comb.extract %441 from 0 : (i87) -> i54 | |
%574 = comb.concat %573, %448 : i54, i1 | |
%575 = comb.xor %574, %c-1_i55 : i55 | |
%576 = comb.and bin %575, %564 : i55 | |
%577 = comb.icmp bin eq %576, %c0_i55 {sv.namehint = "allRoundExtra"} : i55 | |
%578 = comb.concat %569, %571 : i55, i55 | |
%579 = comb.icmp bin ne %578, %c0_i110 {sv.namehint = "anyRound"} : i110 | |
%580 = comb.and bin %570, %577 {sv.namehint = "allRound"} : i1 | |
%581 = comb.mux bin %457, %29, %30 {sv.namehint = "roundDirectUp"} : i1 | |
%582 = comb.xor bin %402, %true : i1 | |
%583 = comb.and bin %582, %28, %570, %572 : i1 | |
%584 = comb.and bin %582, %581, %579 : i1 | |
%585 = comb.and bin %402, %580 : i1 | |
%586 = comb.and bin %402, %28, %570 : i1 | |
%587 = comb.and bin %402, %581 : i1 | |
%588 = comb.or bin %583, %584, %585, %586, %587 {sv.namehint = "roundUp"} : i1 | |
%589 = comb.xor bin %570, %true : i1 | |
%590 = comb.and bin %28, %589, %577 : i1 | |
%591 = comb.xor bin %572, %true : i1 | |
%592 = comb.and bin %28, %570, %591 : i1 | |
%593 = comb.mux bin %402, %590, %592 {sv.namehint = "roundEven"} : i1 | |
%594 = comb.xor bin %580, %true : i1 | |
%595 = comb.mux bin %402, %594, %579 {sv.namehint = "inexactY"} : i1 | |
%596 = comb.extract %441 from 55 : (i87) -> i1 | |
%597 = comb.extract %441 from 1 : (i87) -> i54 | |
%598 = comb.extract %563 from 2 : (i56) -> i54 | |
%599 = comb.or %597, %598 : i54 | |
%600 = comb.concat %596, %599 : i1, i54 | |
%601 = comb.add %600, %c1_i55 {sv.namehint = "roundUp_sigY3"} : i55 | |
%602 = comb.extract %563 from 2 : (i56) -> i54 | |
%603 = comb.xor %602, %c-1_i54 : i54 | |
%604 = comb.extract %441 from 1 : (i87) -> i54 | |
%605 = comb.and %604, %603 : i54 | |
%606 = comb.concat %false, %605 : i1, i54 | |
%607 = comb.or %588, %593 : i1 | |
%608 = comb.mux bin %607, %c0_i55, %606 : i55 | |
%609 = comb.mux bin %588, %601, %c0_i55 : i55 | |
%610 = comb.and bin %601, %565 : i55 | |
%611 = comb.mux bin %593, %610, %c0_i55 : i55 | |
%612 = comb.or bin %608, %609, %611 {sv.namehint = "sigY3"} : i55 | |
%613 = comb.extract %612 from 54 : (i55) -> i1 | |
%614 = comb.extract %452 from 0 : (i14) -> i13 | |
%615 = comb.add %614, %c1_i13 : i13 | |
%616 = comb.mux %613, %615, %c0_i13 : i13 | |
%617 = comb.extract %612 from 53 : (i55) -> i1 | |
%618 = comb.extract %452 from 0 : (i14) -> i13 | |
%619 = comb.mux %617, %618, %c0_i13 : i13 | |
%620 = comb.extract %612 from 53 : (i55) -> i2 | |
%621 = comb.icmp bin eq %620, %c0_i2 : i2 | |
%622 = comb.extract %452 from 0 : (i14) -> i13 | |
%623 = comb.add %622, %c-1_i13 : i13 | |
%624 = comb.mux %621, %623, %c0_i13 : i13 | |
%625 = comb.or %616, %619, %624 {sv.namehint = "sExpY"} : i13 | |
%626 = comb.extract %625 from 0 {sv.namehint = "expY"} : (i13) -> i12 | |
%627 = comb.extract %612 from 0 : (i55) -> i52 | |
%628 = comb.extract %612 from 1 : (i55) -> i52 | |
%629 = comb.mux bin %450, %627, %628 {sv.namehint = "fractY"} : i52 | |
%630 = comb.extract %625 from 10 : (i13) -> i3 | |
%631 = comb.icmp bin eq %630, %c3_i3 {sv.namehint = "overflowY"} : i3 | |
%632 = comb.extract %625 from 12 : (i13) -> i1 | |
%633 = comb.icmp bin ult %626, %c974_i12 : i12 | |
%634 = comb.or bin %632, %633 : i1 | |
%635 = comb.and bin %454, %634 {sv.namehint = "totalUnderflowY"} : i1 | |
%636 = comb.mux bin %450, %c-1022_i11, %c-1023_i11 : i11 | |
%637 = comb.concat %c0_i2, %636 : i2, i11 | |
%638 = comb.icmp bin ule %458, %637 : i13 | |
%639 = comb.or bin %459, %638 : i1 | |
%640 = comb.and bin %29, %457 : i1 | |
%641 = comb.xor bin %457, %true : i1 | |
%642 = comb.and bin %30, %641 : i1 | |
%643 = comb.or bin %640, %642 {sv.namehint = "roundMagUp"} : i1 | |
%644 = comb.or bin %28, %643 {sv.namehint = "overflowY_roundMagUp"} : i1 | |
%645 = comb.or bin %2, %11 {sv.namehint = "mulSpecial"} : i1 | |
%646 = comb.or bin %645, %21 {sv.namehint = "addSpecial"} : i1 | |
%647 = comb.and bin %io_fromPreMul_isZeroProd, %19 {sv.namehint = "notSpecial_addZeros"} : i1 | |
%648 = comb.xor bin %646, %true : i1 | |
%649 = comb.xor bin %647, %true : i1 | |
%650 = comb.and bin %648, %649 {sv.namehint = "commonCase"} : i1 | |
%651 = comb.and bin %5, %9 : i1 | |
%652 = comb.and bin %0, %14 : i1 | |
%653 = comb.xor bin %6, %true : i1 | |
%654 = comb.xor bin %15, %true : i1 | |
%655 = comb.or bin %5, %14 : i1 | |
%656 = comb.and bin %653, %654, %655, %24, %31 : i1 | |
%657 = comb.or bin %651, %652, %656 {sv.namehint = "notSigNaN_invalid"} : i1 | |
%658 = comb.or bin %8, %17, %27, %657 {sv.namehint = "invalid"} : i1 | |
%659 = comb.and bin %650, %631 {sv.namehint = "overflow"} : i1 | |
%660 = comb.and bin %650, %595, %639 {sv.namehint = "underflow"} : i1 | |
%661 = comb.and bin %650, %595 : i1 | |
%662 = comb.or bin %659, %661 {sv.namehint = "inexact"} : i1 | |
%663 = comb.or bin %647, %455, %635 {sv.namehint = "notSpecial_isZeroOut"} : i1 | |
%664 = comb.and bin %650, %635, %643 {sv.namehint = "pegMinFiniteMagOut"} : i1 | |
%665 = comb.xor bin %644, %true : i1 | |
%666 = comb.and bin %659, %665 {sv.namehint = "pegMaxFiniteMagOut"} : i1 | |
%667 = comb.and bin %659, %644 : i1 | |
%668 = comb.or bin %655, %24, %667 {sv.namehint = "notNaN_isInfOut"} : i1 | |
%669 = comb.or bin %6, %15, %25, %657 {sv.namehint = "isNaNOut"} : i1 | |
%670 = comb.and bin %322, %io_fromPreMul_opSignC : i1 | |
%671 = comb.xor bin %21, %true : i1 | |
%672 = comb.and bin %645, %671, %io_fromPreMul_signProd : i1 | |
%673 = comb.xor bin %645, %true : i1 | |
%674 = comb.and bin %673, %21, %io_fromPreMul_opSignC : i1 | |
%675 = comb.and bin %673, %647, %31, %29 : i1 | |
%676 = comb.or bin %670, %672, %674, %675 {sv.namehint = "uncommonCaseSignOut"} : i1 | |
%677 = comb.xor bin %669, %true : i1 | |
%678 = comb.and bin %677, %676 : i1 | |
%679 = comb.and bin %650, %457 : i1 | |
%680 = comb.or bin %678, %679 {sv.namehint = "signOut"} : i1 | |
%681 = comb.mux bin %663, %c-512_i12, %c0_i12 : i12 | |
%682 = comb.xor bin %681, %c-1_i12 : i12 | |
%683 = comb.mux bin %664, %c-975_i12, %c0_i12 : i12 | |
%684 = comb.xor bin %683, %c-1_i12 : i12 | |
%685 = comb.xor %666, %true : i1 | |
%686 = comb.concat %true, %685, %c-1_i10 : i1, i1, i10 | |
%687 = comb.xor %668, %true : i1 | |
%688 = comb.concat %c-1_i2, %687, %c-1_i9 : i2, i1, i9 | |
%689 = comb.and bin %626, %682, %684, %686, %688 : i12 | |
%690 = comb.mux bin %664, %c974_i12, %c0_i12 : i12 | |
%691 = comb.mux bin %666, %c-1025_i12, %c0_i12 : i12 | |
%692 = comb.mux bin %668, %c-1024_i12, %c0_i12 : i12 | |
%693 = comb.mux bin %669, %c-512_i12, %c0_i12 : i12 | |
%694 = comb.or bin %689, %690, %691, %692, %693 {sv.namehint = "expOut"} : i12 | |
%695 = comb.and bin %635, %643 : i1 | |
%696 = comb.or bin %695, %669 : i1 | |
%697 = comb.concat %669, %c0_i51 : i1, i51 | |
%698 = comb.mux bin %696, %697, %629 : i52 | |
%699 = comb.replicate %666 : (i1) -> i52 | |
%700 = comb.or bin %698, %699 {sv.namehint = "fractOut"} : i52 | |
%701 = comb.concat %680, %694, %700 {sv.namehint = "io_out"} : i1, i12, i52 | |
%702 = comb.concat %658, %false, %659, %660, %662 {sv.namehint = "io_exceptionFlags"} : i1, i1, i1, i1, i1 | |
hw.output %701, %702 : i65, i5 | |
} | |
om.class @FPU_Class(%basepath: !om.basepath) { | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment