Skip to content

Instantly share code, notes, and snippets.

@rygorous
Created August 9, 2013 22:53
Embed
What would you like to do?
bilinear8x8
static CODEGEN_ATTR void bilinear_8x8_h0_v25(char unsigned * RADRESTRICT src, char unsigned * RADRESTRICT dest, int sw, int dw)
{
{
char unsigned * RADRESTRICT v1 = (char unsigned * RADRESTRICT)(dest);
char unsigned * RADRESTRICT v0 = (char unsigned * RADRESTRICT)(src);
char unsigned v4[16] = {*(char unsigned *)(v0 + 0), *(char unsigned *)(v0 + 1), *(char unsigned *)(v0 + 2), *(char unsigned *)(v0 + 3), *(char unsigned *)(v0 + 4), *(char unsigned *)(v0 + 5), *(char unsigned *)(v0 + 6), *(char unsigned *)(v0 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v5[8] = {(v4[0] << 0), (v4[1] << 0), (v4[2] << 0), (v4[3] << 0), (v4[4] << 0), (v4[5] << 0), (v4[6] << 0), (v4[7] << 0)};
short v6[8] = {v5[0] << 4, v5[1] << 4, v5[2] << 4, v5[3] << 4, v5[4] << 4, v5[5] << 4, v5[6] << 4, v5[7] << 4, };
int v2 = sw;
char unsigned * RADRESTRICT v7 = v0 + v2;
char unsigned v8[16] = {*(char unsigned *)(v7 + 0), *(char unsigned *)(v7 + 1), *(char unsigned *)(v7 + 2), *(char unsigned *)(v7 + 3), *(char unsigned *)(v7 + 4), *(char unsigned *)(v7 + 5), *(char unsigned *)(v7 + 6), *(char unsigned *)(v7 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v9[8] = {(v8[0] << 0), (v8[1] << 0), (v8[2] << 0), (v8[3] << 0), (v8[4] << 0), (v8[5] << 0), (v8[6] << 0), (v8[7] << 0)};
short v10[8] = {v9[0] << 4, v9[1] << 4, v9[2] << 4, v9[3] << 4, v9[4] << 4, v9[5] << 4, v9[6] << 4, v9[7] << 4, };
short v40[8] = {v10[0] - v6[0], v10[1] - v6[1], v10[2] - v6[2], v10[3] - v6[3], v10[4] - v6[4], v10[5] - v6[5], v10[6] - v6[6], v10[7] - v6[7], };
short v41[8] = {v40[0] >> 2, v40[1] >> 2, v40[2] >> 2, v40[3] >> 2, v40[4] >> 2, v40[5] >> 2, v40[6] >> 2, v40[7] >> 2, };
short v42[8] = {v6[0] + v41[0], v6[1] + v41[1], v6[2] + v41[2], v6[3] + v41[3], v6[4] + v41[4], v6[5] + v41[5], v6[6] + v41[6], v6[7] + v41[7], };
short v43[8] = {(v42[0] + 8) >> 4, (v42[1] + 8) >> 4, (v42[2] + 8) >> 4, (v42[3] + 8) >> 4, (v42[4] + 8) >> 4, (v42[5] + 8) >> 4, (v42[6] + 8) >> 4, (v42[7] + 8) >> 4, };
char unsigned v44[16] = {ClampToVBT_8x_U8(v43[0]), ClampToVBT_8x_U8(v43[1]), ClampToVBT_8x_U8(v43[2]), ClampToVBT_8x_U8(v43[3]), ClampToVBT_8x_U8(v43[4]), ClampToVBT_8x_U8(v43[5]), ClampToVBT_8x_U8(v43[6]), ClampToVBT_8x_U8(v43[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v1 + 0) = v44[0];
*(char unsigned *)(v1 + 1) = v44[1];
*(char unsigned *)(v1 + 2) = v44[2];
*(char unsigned *)(v1 + 3) = v44[3];
*(char unsigned *)(v1 + 4) = v44[4];
*(char unsigned *)(v1 + 5) = v44[5];
*(char unsigned *)(v1 + 6) = v44[6];
*(char unsigned *)(v1 + 7) = v44[7];
{
int v3 = dw;
char unsigned * RADRESTRICT v81 = v1 + v3;
char unsigned * RADRESTRICT v11 = v7 + v2;
char unsigned v12[16] = {*(char unsigned *)(v11 + 0), *(char unsigned *)(v11 + 1), *(char unsigned *)(v11 + 2), *(char unsigned *)(v11 + 3), *(char unsigned *)(v11 + 4), *(char unsigned *)(v11 + 5), *(char unsigned *)(v11 + 6), *(char unsigned *)(v11 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v13[8] = {(v12[0] << 0), (v12[1] << 0), (v12[2] << 0), (v12[3] << 0), (v12[4] << 0), (v12[5] << 0), (v12[6] << 0), (v12[7] << 0)};
short v14[8] = {v13[0] << 4, v13[1] << 4, v13[2] << 4, v13[3] << 4, v13[4] << 4, v13[5] << 4, v13[6] << 4, v13[7] << 4, };
short v45[8] = {v14[0] - v10[0], v14[1] - v10[1], v14[2] - v10[2], v14[3] - v10[3], v14[4] - v10[4], v14[5] - v10[5], v14[6] - v10[6], v14[7] - v10[7], };
short v46[8] = {v45[0] >> 2, v45[1] >> 2, v45[2] >> 2, v45[3] >> 2, v45[4] >> 2, v45[5] >> 2, v45[6] >> 2, v45[7] >> 2, };
short v47[8] = {v10[0] + v46[0], v10[1] + v46[1], v10[2] + v46[2], v10[3] + v46[3], v10[4] + v46[4], v10[5] + v46[5], v10[6] + v46[6], v10[7] + v46[7], };
short v48[8] = {(v47[0] + 8) >> 4, (v47[1] + 8) >> 4, (v47[2] + 8) >> 4, (v47[3] + 8) >> 4, (v47[4] + 8) >> 4, (v47[5] + 8) >> 4, (v47[6] + 8) >> 4, (v47[7] + 8) >> 4, };
char unsigned v49[16] = {ClampToVBT_8x_U8(v48[0]), ClampToVBT_8x_U8(v48[1]), ClampToVBT_8x_U8(v48[2]), ClampToVBT_8x_U8(v48[3]), ClampToVBT_8x_U8(v48[4]), ClampToVBT_8x_U8(v48[5]), ClampToVBT_8x_U8(v48[6]), ClampToVBT_8x_U8(v48[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v81 + 0) = v49[0];
*(char unsigned *)(v81 + 1) = v49[1];
*(char unsigned *)(v81 + 2) = v49[2];
*(char unsigned *)(v81 + 3) = v49[3];
*(char unsigned *)(v81 + 4) = v49[4];
*(char unsigned *)(v81 + 5) = v49[5];
*(char unsigned *)(v81 + 6) = v49[6];
*(char unsigned *)(v81 + 7) = v49[7];
{
char unsigned * RADRESTRICT v83 = v81 + v3;
char unsigned * RADRESTRICT v15 = v11 + v2;
char unsigned v16[16] = {*(char unsigned *)(v15 + 0), *(char unsigned *)(v15 + 1), *(char unsigned *)(v15 + 2), *(char unsigned *)(v15 + 3), *(char unsigned *)(v15 + 4), *(char unsigned *)(v15 + 5), *(char unsigned *)(v15 + 6), *(char unsigned *)(v15 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v17[8] = {(v16[0] << 0), (v16[1] << 0), (v16[2] << 0), (v16[3] << 0), (v16[4] << 0), (v16[5] << 0), (v16[6] << 0), (v16[7] << 0)};
short v18[8] = {v17[0] << 4, v17[1] << 4, v17[2] << 4, v17[3] << 4, v17[4] << 4, v17[5] << 4, v17[6] << 4, v17[7] << 4, };
short v50[8] = {v18[0] - v14[0], v18[1] - v14[1], v18[2] - v14[2], v18[3] - v14[3], v18[4] - v14[4], v18[5] - v14[5], v18[6] - v14[6], v18[7] - v14[7], };
short v51[8] = {v50[0] >> 2, v50[1] >> 2, v50[2] >> 2, v50[3] >> 2, v50[4] >> 2, v50[5] >> 2, v50[6] >> 2, v50[7] >> 2, };
short v52[8] = {v14[0] + v51[0], v14[1] + v51[1], v14[2] + v51[2], v14[3] + v51[3], v14[4] + v51[4], v14[5] + v51[5], v14[6] + v51[6], v14[7] + v51[7], };
short v53[8] = {(v52[0] + 8) >> 4, (v52[1] + 8) >> 4, (v52[2] + 8) >> 4, (v52[3] + 8) >> 4, (v52[4] + 8) >> 4, (v52[5] + 8) >> 4, (v52[6] + 8) >> 4, (v52[7] + 8) >> 4, };
char unsigned v54[16] = {ClampToVBT_8x_U8(v53[0]), ClampToVBT_8x_U8(v53[1]), ClampToVBT_8x_U8(v53[2]), ClampToVBT_8x_U8(v53[3]), ClampToVBT_8x_U8(v53[4]), ClampToVBT_8x_U8(v53[5]), ClampToVBT_8x_U8(v53[6]), ClampToVBT_8x_U8(v53[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v83 + 0) = v54[0];
*(char unsigned *)(v83 + 1) = v54[1];
*(char unsigned *)(v83 + 2) = v54[2];
*(char unsigned *)(v83 + 3) = v54[3];
*(char unsigned *)(v83 + 4) = v54[4];
*(char unsigned *)(v83 + 5) = v54[5];
*(char unsigned *)(v83 + 6) = v54[6];
*(char unsigned *)(v83 + 7) = v54[7];
{
char unsigned * RADRESTRICT v85 = v83 + v3;
char unsigned * RADRESTRICT v19 = v15 + v2;
char unsigned v20[16] = {*(char unsigned *)(v19 + 0), *(char unsigned *)(v19 + 1), *(char unsigned *)(v19 + 2), *(char unsigned *)(v19 + 3), *(char unsigned *)(v19 + 4), *(char unsigned *)(v19 + 5), *(char unsigned *)(v19 + 6), *(char unsigned *)(v19 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v21[8] = {(v20[0] << 0), (v20[1] << 0), (v20[2] << 0), (v20[3] << 0), (v20[4] << 0), (v20[5] << 0), (v20[6] << 0), (v20[7] << 0)};
short v22[8] = {v21[0] << 4, v21[1] << 4, v21[2] << 4, v21[3] << 4, v21[4] << 4, v21[5] << 4, v21[6] << 4, v21[7] << 4, };
short v55[8] = {v22[0] - v18[0], v22[1] - v18[1], v22[2] - v18[2], v22[3] - v18[3], v22[4] - v18[4], v22[5] - v18[5], v22[6] - v18[6], v22[7] - v18[7], };
short v56[8] = {v55[0] >> 2, v55[1] >> 2, v55[2] >> 2, v55[3] >> 2, v55[4] >> 2, v55[5] >> 2, v55[6] >> 2, v55[7] >> 2, };
short v57[8] = {v18[0] + v56[0], v18[1] + v56[1], v18[2] + v56[2], v18[3] + v56[3], v18[4] + v56[4], v18[5] + v56[5], v18[6] + v56[6], v18[7] + v56[7], };
short v58[8] = {(v57[0] + 8) >> 4, (v57[1] + 8) >> 4, (v57[2] + 8) >> 4, (v57[3] + 8) >> 4, (v57[4] + 8) >> 4, (v57[5] + 8) >> 4, (v57[6] + 8) >> 4, (v57[7] + 8) >> 4, };
char unsigned v59[16] = {ClampToVBT_8x_U8(v58[0]), ClampToVBT_8x_U8(v58[1]), ClampToVBT_8x_U8(v58[2]), ClampToVBT_8x_U8(v58[3]), ClampToVBT_8x_U8(v58[4]), ClampToVBT_8x_U8(v58[5]), ClampToVBT_8x_U8(v58[6]), ClampToVBT_8x_U8(v58[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v85 + 0) = v59[0];
*(char unsigned *)(v85 + 1) = v59[1];
*(char unsigned *)(v85 + 2) = v59[2];
*(char unsigned *)(v85 + 3) = v59[3];
*(char unsigned *)(v85 + 4) = v59[4];
*(char unsigned *)(v85 + 5) = v59[5];
*(char unsigned *)(v85 + 6) = v59[6];
*(char unsigned *)(v85 + 7) = v59[7];
{
char unsigned * RADRESTRICT v87 = v85 + v3;
char unsigned * RADRESTRICT v23 = v19 + v2;
char unsigned v24[16] = {*(char unsigned *)(v23 + 0), *(char unsigned *)(v23 + 1), *(char unsigned *)(v23 + 2), *(char unsigned *)(v23 + 3), *(char unsigned *)(v23 + 4), *(char unsigned *)(v23 + 5), *(char unsigned *)(v23 + 6), *(char unsigned *)(v23 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v25[8] = {(v24[0] << 0), (v24[1] << 0), (v24[2] << 0), (v24[3] << 0), (v24[4] << 0), (v24[5] << 0), (v24[6] << 0), (v24[7] << 0)};
short v26[8] = {v25[0] << 4, v25[1] << 4, v25[2] << 4, v25[3] << 4, v25[4] << 4, v25[5] << 4, v25[6] << 4, v25[7] << 4, };
short v60[8] = {v26[0] - v22[0], v26[1] - v22[1], v26[2] - v22[2], v26[3] - v22[3], v26[4] - v22[4], v26[5] - v22[5], v26[6] - v22[6], v26[7] - v22[7], };
short v61[8] = {v60[0] >> 2, v60[1] >> 2, v60[2] >> 2, v60[3] >> 2, v60[4] >> 2, v60[5] >> 2, v60[6] >> 2, v60[7] >> 2, };
short v62[8] = {v22[0] + v61[0], v22[1] + v61[1], v22[2] + v61[2], v22[3] + v61[3], v22[4] + v61[4], v22[5] + v61[5], v22[6] + v61[6], v22[7] + v61[7], };
short v63[8] = {(v62[0] + 8) >> 4, (v62[1] + 8) >> 4, (v62[2] + 8) >> 4, (v62[3] + 8) >> 4, (v62[4] + 8) >> 4, (v62[5] + 8) >> 4, (v62[6] + 8) >> 4, (v62[7] + 8) >> 4, };
char unsigned v64[16] = {ClampToVBT_8x_U8(v63[0]), ClampToVBT_8x_U8(v63[1]), ClampToVBT_8x_U8(v63[2]), ClampToVBT_8x_U8(v63[3]), ClampToVBT_8x_U8(v63[4]), ClampToVBT_8x_U8(v63[5]), ClampToVBT_8x_U8(v63[6]), ClampToVBT_8x_U8(v63[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v87 + 0) = v64[0];
*(char unsigned *)(v87 + 1) = v64[1];
*(char unsigned *)(v87 + 2) = v64[2];
*(char unsigned *)(v87 + 3) = v64[3];
*(char unsigned *)(v87 + 4) = v64[4];
*(char unsigned *)(v87 + 5) = v64[5];
*(char unsigned *)(v87 + 6) = v64[6];
*(char unsigned *)(v87 + 7) = v64[7];
{
char unsigned * RADRESTRICT v89 = v87 + v3;
char unsigned * RADRESTRICT v27 = v23 + v2;
char unsigned v28[16] = {*(char unsigned *)(v27 + 0), *(char unsigned *)(v27 + 1), *(char unsigned *)(v27 + 2), *(char unsigned *)(v27 + 3), *(char unsigned *)(v27 + 4), *(char unsigned *)(v27 + 5), *(char unsigned *)(v27 + 6), *(char unsigned *)(v27 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v29[8] = {(v28[0] << 0), (v28[1] << 0), (v28[2] << 0), (v28[3] << 0), (v28[4] << 0), (v28[5] << 0), (v28[6] << 0), (v28[7] << 0)};
short v30[8] = {v29[0] << 4, v29[1] << 4, v29[2] << 4, v29[3] << 4, v29[4] << 4, v29[5] << 4, v29[6] << 4, v29[7] << 4, };
short v65[8] = {v30[0] - v26[0], v30[1] - v26[1], v30[2] - v26[2], v30[3] - v26[3], v30[4] - v26[4], v30[5] - v26[5], v30[6] - v26[6], v30[7] - v26[7], };
short v66[8] = {v65[0] >> 2, v65[1] >> 2, v65[2] >> 2, v65[3] >> 2, v65[4] >> 2, v65[5] >> 2, v65[6] >> 2, v65[7] >> 2, };
short v67[8] = {v26[0] + v66[0], v26[1] + v66[1], v26[2] + v66[2], v26[3] + v66[3], v26[4] + v66[4], v26[5] + v66[5], v26[6] + v66[6], v26[7] + v66[7], };
short v68[8] = {(v67[0] + 8) >> 4, (v67[1] + 8) >> 4, (v67[2] + 8) >> 4, (v67[3] + 8) >> 4, (v67[4] + 8) >> 4, (v67[5] + 8) >> 4, (v67[6] + 8) >> 4, (v67[7] + 8) >> 4, };
char unsigned v69[16] = {ClampToVBT_8x_U8(v68[0]), ClampToVBT_8x_U8(v68[1]), ClampToVBT_8x_U8(v68[2]), ClampToVBT_8x_U8(v68[3]), ClampToVBT_8x_U8(v68[4]), ClampToVBT_8x_U8(v68[5]), ClampToVBT_8x_U8(v68[6]), ClampToVBT_8x_U8(v68[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v89 + 0) = v69[0];
*(char unsigned *)(v89 + 1) = v69[1];
*(char unsigned *)(v89 + 2) = v69[2];
*(char unsigned *)(v89 + 3) = v69[3];
*(char unsigned *)(v89 + 4) = v69[4];
*(char unsigned *)(v89 + 5) = v69[5];
*(char unsigned *)(v89 + 6) = v69[6];
*(char unsigned *)(v89 + 7) = v69[7];
{
char unsigned * RADRESTRICT v91 = v89 + v3;
char unsigned * RADRESTRICT v31 = v27 + v2;
char unsigned v32[16] = {*(char unsigned *)(v31 + 0), *(char unsigned *)(v31 + 1), *(char unsigned *)(v31 + 2), *(char unsigned *)(v31 + 3), *(char unsigned *)(v31 + 4), *(char unsigned *)(v31 + 5), *(char unsigned *)(v31 + 6), *(char unsigned *)(v31 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v33[8] = {(v32[0] << 0), (v32[1] << 0), (v32[2] << 0), (v32[3] << 0), (v32[4] << 0), (v32[5] << 0), (v32[6] << 0), (v32[7] << 0)};
short v34[8] = {v33[0] << 4, v33[1] << 4, v33[2] << 4, v33[3] << 4, v33[4] << 4, v33[5] << 4, v33[6] << 4, v33[7] << 4, };
short v70[8] = {v34[0] - v30[0], v34[1] - v30[1], v34[2] - v30[2], v34[3] - v30[3], v34[4] - v30[4], v34[5] - v30[5], v34[6] - v30[6], v34[7] - v30[7], };
short v71[8] = {v70[0] >> 2, v70[1] >> 2, v70[2] >> 2, v70[3] >> 2, v70[4] >> 2, v70[5] >> 2, v70[6] >> 2, v70[7] >> 2, };
short v72[8] = {v30[0] + v71[0], v30[1] + v71[1], v30[2] + v71[2], v30[3] + v71[3], v30[4] + v71[4], v30[5] + v71[5], v30[6] + v71[6], v30[7] + v71[7], };
short v73[8] = {(v72[0] + 8) >> 4, (v72[1] + 8) >> 4, (v72[2] + 8) >> 4, (v72[3] + 8) >> 4, (v72[4] + 8) >> 4, (v72[5] + 8) >> 4, (v72[6] + 8) >> 4, (v72[7] + 8) >> 4, };
char unsigned v74[16] = {ClampToVBT_8x_U8(v73[0]), ClampToVBT_8x_U8(v73[1]), ClampToVBT_8x_U8(v73[2]), ClampToVBT_8x_U8(v73[3]), ClampToVBT_8x_U8(v73[4]), ClampToVBT_8x_U8(v73[5]), ClampToVBT_8x_U8(v73[6]), ClampToVBT_8x_U8(v73[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v91 + 0) = v74[0];
*(char unsigned *)(v91 + 1) = v74[1];
*(char unsigned *)(v91 + 2) = v74[2];
*(char unsigned *)(v91 + 3) = v74[3];
*(char unsigned *)(v91 + 4) = v74[4];
*(char unsigned *)(v91 + 5) = v74[5];
*(char unsigned *)(v91 + 6) = v74[6];
*(char unsigned *)(v91 + 7) = v74[7];
{
char unsigned * RADRESTRICT v93 = v91 + v3;
char unsigned * RADRESTRICT v35 = v31 + v2;
char unsigned v36[16] = {*(char unsigned *)(v35 + 0), *(char unsigned *)(v35 + 1), *(char unsigned *)(v35 + 2), *(char unsigned *)(v35 + 3), *(char unsigned *)(v35 + 4), *(char unsigned *)(v35 + 5), *(char unsigned *)(v35 + 6), *(char unsigned *)(v35 + 7), 0, 0, 0, 0, 0, 0, 0, 0, };
short v37[8] = {(v36[0] << 0), (v36[1] << 0), (v36[2] << 0), (v36[3] << 0), (v36[4] << 0), (v36[5] << 0), (v36[6] << 0), (v36[7] << 0)};
short v38[8] = {v37[0] << 4, v37[1] << 4, v37[2] << 4, v37[3] << 4, v37[4] << 4, v37[5] << 4, v37[6] << 4, v37[7] << 4, };
short v75[8] = {v38[0] - v34[0], v38[1] - v34[1], v38[2] - v34[2], v38[3] - v34[3], v38[4] - v34[4], v38[5] - v34[5], v38[6] - v34[6], v38[7] - v34[7], };
short v76[8] = {v75[0] >> 2, v75[1] >> 2, v75[2] >> 2, v75[3] >> 2, v75[4] >> 2, v75[5] >> 2, v75[6] >> 2, v75[7] >> 2, };
short v77[8] = {v34[0] + v76[0], v34[1] + v76[1], v34[2] + v76[2], v34[3] + v76[3], v34[4] + v76[4], v34[5] + v76[5], v34[6] + v76[6], v34[7] + v76[7], };
short v78[8] = {(v77[0] + 8) >> 4, (v77[1] + 8) >> 4, (v77[2] + 8) >> 4, (v77[3] + 8) >> 4, (v77[4] + 8) >> 4, (v77[5] + 8) >> 4, (v77[6] + 8) >> 4, (v77[7] + 8) >> 4, };
char unsigned v79[16] = {ClampToVBT_8x_U8(v78[0]), ClampToVBT_8x_U8(v78[1]), ClampToVBT_8x_U8(v78[2]), ClampToVBT_8x_U8(v78[3]), ClampToVBT_8x_U8(v78[4]), ClampToVBT_8x_U8(v78[5]), ClampToVBT_8x_U8(v78[6]), ClampToVBT_8x_U8(v78[7]), 0, 0, 0, 0, 0, 0, 0, 0, };
*(char unsigned *)(v93 + 0) = v79[0];
*(char unsigned *)(v93 + 1) = v79[1];
*(char unsigned *)(v93 + 2) = v79[2];
*(char unsigned *)(v93 + 3) = v79[3];
*(char unsigned *)(v93 + 4) = v79[4];
*(char unsigned *)(v93 + 5) = v79[5];
*(char unsigned *)(v93 + 6) = v79[6];
*(char unsigned *)(v93 + 7) = v79[7];
}
}
}
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment