data $GROUPS$0 align 1 {
    str "ab";
}

data $GROUPS$1 align 1 {
    str "cd";
}

data $GROUPS$2 align 8 {
    sym $GROUPS$0;
    w32 2;
    w32 2;
    sym $GROUPS$1;
    w32 2;
    w32 2;
}

data $GROUPS$3 align 1 {
    str "efg";
}

data $GROUPS$4 align 8 {
    sym $GROUPS$3;
    w32 3;
    w32 3;
}

data $GROUPS align 8 {
    sym $GROUPS$2;
    w32 2;
    w32 2;
    sym $GROUPS$4;
    w32 1;
    w32 1;
}

fn w32 $totalLen() {
  @entry0
    copy %0 $GROUPS;
    load w32 %1 %0 8;
    copy %2 $GROUPS;
    mul w64 %3 1 16;
    add ptr %4 %2 %3;
    load w32 %5 %4 8;
    add w32 %6 %1 %5;
    copy %7 $GROUPS;
    load w32 %8 %7 8;
    load ptr %9 %7 0;
    elem %10 %9 1 %8 16;
    load w32 %11 %10 8;
    add w32 %12 %6 %11;
    ret %12;
}
