Global Metrics

path: .metrics.mi.mi_original
old: 67.1370733650729
new: 55.04696490704053

path: .metrics.mi.mi_visual_studio
old: 39.26144641232333
new: 32.191207547976916

path: .metrics.mi.mi_sei
old: 62.73915287057048
new: 35.19743394722814

path: .metrics.nom.functions
old: 2.0
new: 1.0

path: .metrics.nom.total
old: 2.0
new: 1.0

path: .metrics.loc.blank
old: 9.0
new: 7.0

path: .metrics.loc.cloc
old: 25.0
new: 12.0

path: .metrics.loc.sloc
old: 67.0
new: 75.0

path: .metrics.loc.ploc
old: 33.0
new: 56.0

path: .metrics.loc.lloc
old: 9.0
new: 57.0

path: .metrics.cyclomatic.sum
old: 10.0
new: 24.0

path: .metrics.cyclomatic.average
old: 2.0
new: 12.0

path: .metrics.nexits.sum
old: 4.0
new: 0.0

path: .metrics.nexits.average
old: 2.0
new: 0.0

path: .metrics.cognitive.average
old: 2.0
new: 25.0

path: .metrics.cognitive.sum
old: 4.0
new: 25.0

path: .metrics.nargs.sum
old: 1.0
new: 5.0

path: .metrics.nargs.average
old: 0.5
new: 5.0

path: .metrics.halstead.time
old: 670.9116260328556
new: 4667.980251102139

path: .metrics.halstead.vocabulary
old: 41.0
new: 73.0

path: .metrics.halstead.bugs
old: 0.17545697079960015
new: 0.6394595661474614

path: .metrics.halstead.length
old: 116.0
new: 389.0

path: .metrics.halstead.N2
old: 45.0
new: 134.0

path: .metrics.halstead.volume
old: 621.4760325356978
new: 2407.841753404327

path: .metrics.halstead.n1
old: 19.0
new: 25.0

path: .metrics.halstead.purity_ratio
old: 1.5415355031504192
new: 0.9875953850359476

path: .metrics.halstead.effort
old: 12076.4092685914
new: 84023.6445198385

path: .metrics.halstead.N1
old: 71.0
new: 255.0

path: .metrics.halstead.difficulty
old: 19.431818181818183
new: 34.895833333333336

path: .metrics.halstead.estimated_program_length
old: 178.81811836544864
new: 384.1746047789836

path: .metrics.halstead.n2
old: 22.0
new: 48.0

path: .metrics.halstead.level
old: 0.05146198830409356
new: 0.028656716417910445

Spaces Data

Minimal test - lines (18, 75)

path: .spaces[0].metrics.halstead.bugs
old: 0.1642499402902525
new: 0.6380314122018734

path: .spaces[0].metrics.halstead.length
old: 106.0
new: 377.0

path: .spaces[0].metrics.halstead.N2
old: 38.0
new: 128.0

path: .spaces[0].metrics.halstead.level
old: 0.04970760233918129
new: 0.027499999999999997

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.3636369653511076
new: 0.945123066218592

path: .spaces[0].metrics.halstead.vocabulary
old: 35.0
new: 69.0

path: .spaces[0].metrics.halstead.n1
old: 18.0
new: 25.0

path: .spaces[0].metrics.halstead.n2
old: 17.0
new: 44.0

path: .spaces[0].metrics.halstead.time
old: 607.6691762427741
new: 4652.350949909839

path: .spaces[0].metrics.halstead.volume
old: 543.7039997961664
new: 2302.91372020537

path: .spaces[0].metrics.halstead.effort
old: 10938.045172369935
new: 83742.3170983771

path: .spaces[0].metrics.halstead.N1
old: 68.0
new: 249.0

path: .spaces[0].metrics.halstead.difficulty
old: 20.11764705882353
new: 36.36363636363637

path: .spaces[0].metrics.halstead.estimated_program_length
old: 144.5455183272174
new: 356.3113959644092

path: .spaces[0].metrics.cyclomatic.average
old: 2.0
new: 23.0

path: .spaces[0].metrics.cyclomatic.sum
old: 8.0
new: 23.0

path: .spaces[0].metrics.nargs.average
old: 0.5
new: 5.0

path: .spaces[0].metrics.nargs.sum
old: 1.0
new: 5.0

path: .spaces[0].metrics.nexits.average
old: 2.0
new: 0.0

path: .spaces[0].metrics.nexits.sum
old: 4.0
new: 0.0

path: .spaces[0].metrics.mi.mi_original
old: 77.47939831254158
new: 59.672784966987294

path: .spaces[0].metrics.mi.mi_sei
old: 71.11855832157522
new: 29.98501641605572

path: .spaces[0].metrics.mi.mi_visual_studio
old: 45.309589656457064
new: 34.896365477770345

path: .spaces[0].metrics.cognitive.average
old: 1.5
new: 25.0

path: .spaces[0].metrics.cognitive.sum
old: 3.0
new: 25.0

path: .spaces[0].metrics.nom.functions
old: 2.0
new: 1.0

path: .spaces[0].metrics.nom.total
old: 2.0
new: 1.0

path: .spaces[0].metrics.loc.sloc
old: 38.0
new: 58.0

path: .spaces[0].metrics.loc.cloc
old: 9.0
new: 3.0

path: .spaces[0].metrics.loc.ploc
old: 24.0
new: 53.0

path: .spaces[0].metrics.loc.blank
old: 5.0
new: 2.0

path: .spaces[0].metrics.loc.lloc
old: 9.0
new: 57.0

Code

extern "C" void
InvokeCopyToStack(uint64_t * gpregs, double * fpregs,
                     uint32_t paramCount, nsXPTCVariant * s,
                     uint64_t* d)
{
    uint32_t nr_gpr = 0u;
    uint32_t nr_fpr = 0u;
    uint64_t value = 0u;

    for (uint32_t i = 0; i < paramCount; i++, s++) {
        if (s->IsIndirect())
            value = (uint64_t) &s->val;
        else {
            switch (s->type) {
            case nsXPTType::T_FLOAT:                                break;
            case nsXPTType::T_DOUBLE:                               break;
            case nsXPTType::T_I8:     value = s->val.i8;            break;
            case nsXPTType::T_I16:    value = s->val.i16;           break;
            case nsXPTType::T_I32:    value = s->val.i32;           break;
            case nsXPTType::T_I64:    value = s->val.i64;           break;
            case nsXPTType::T_U8:     value = s->val.u8;            break;
            case nsXPTType::T_U16:    value = s->val.u16;           break;
            case nsXPTType::T_U32:    value = s->val.u32;           break;
            case nsXPTType::T_U64:    value = s->val.u64;           break;
            case nsXPTType::T_BOOL:   value = s->val.b;             break;
            case nsXPTType::T_CHAR:   value = s->val.c;             break;
            case nsXPTType::T_WCHAR:  value = s->val.wc;            break;
            default:                  value = (uint64_t) s->val.p;  break;
            }
        }

        if (!s->IsIndirect() && s->type == nsXPTType::T_DOUBLE) {
            if (nr_fpr < FPR_COUNT)
                fpregs[nr_fpr++] = s->val.d;
            else {
                *((double *)d) = s->val.d;
                d++;
            }
        }
        else if (!s->IsIndirect() && s->type == nsXPTType::T_FLOAT) {
            if (nr_fpr < FPR_COUNT)
                // The value in %xmm register is already prepared to
                // be retrieved as a float. Therefore, we pass the
                // value verbatim, as a double without conversion.
                fpregs[nr_fpr++] = s->val.d;
            else {
                *((float *)d) = s->val.f;
                d++;
            }
        }
        else {
            if (nr_gpr < GPR_COUNT)
                gpregs[nr_gpr++] = value;
            else
                *d++ = value;
        }
    }
}