Annotation of nono/vm/accel_neon.cpp, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2024 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // NEON
        !             9: //
        !            10: 
        !            11: #include "videoctlr.h"
        !            12: #include <arm_neon.h>
        !            13: 
        !            14: // コントラスト (0-254) を適用。
        !            15: // (ちなみに _gen は 1265 usec)
        !            16: /*static*/ void
        !            17: VideoCtlrDevice::RenderContrast_neon(BitmapRGBX& dst, const BitmapRGBX& src,
        !            18:        uint32 contrast)
        !            19: {
        !            20:        // この変換は一次元配列とみなしても行える。
        !            21:        // また必ずテキスト画面全域なので端数の考慮は不要。
        !            22:        uint pxlen = src.GetWidth() * src.GetHeight();
        !            23:        const uint32 *s32 = (const uint32 *)src.GetRowPtr(0);
        !            24:        uint32 *d32 = (uint32 *)dst.GetRowPtr(0);
        !            25:        uint32 *d32end  = d32 + pxlen;
        !            26: 
        !            27:        uint8x8_t vcont = vdup_n_u8(contrast);
        !            28: 
        !            29:        for (; d32 < d32end; ) {
        !            30:                // 2ピクセルずつ処理する
        !            31:                // 614 usec
        !            32: 
        !            33:                uint8x8_t  vsrc = vld1_u8((const uint8 *)s32);
        !            34:                uint16x8_t vmul = vmull_u8(vsrc, vcont);
        !            35:                uint8x8_t  vres = vrshrn_n_u16(vmul, 8);
        !            36:                vst1_u8((uint8 *)d32, vres);
        !            37:                s32 += 2;
        !            38:                d32 += 2;
        !            39:        }
        !            40: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.