Lines Matching defs:program

33 // Our program is an array of void*, either
37 // load_and_inc() steps the program forward by 1 void*, returning that pointer.
38 SI void* load_and_inc(void**& program) {
40 // If program is in %rsi (we try to make this likely) then this is a single instruction.
42 asm("lodsq" : "=a"(rax), "+S"(program)); // Write-only %rax, read-write %rsi.
45 // On ARM *program++ compiles into pretty ideal code without any handholding.
46 return *program++;
55 void**& program;
57 explicit Ctx(void**& p) : ptr(nullptr), program(p) {}
61 if (!ptr) { ptr = load_and_inc(program); }
1077 using Stage = void(ABI*)(Params*, void** program, F r, F g, F b, F a);
1079 // We keep program the second argument, so that it's passed in rsi for load_and_inc().
1080 using Stage = void(ABI*)(size_t tail, void** program, size_t dx, size_t dy, F,F,F,F, F,F,F,F);
1084 static void start_pipeline(size_t dx, size_t dy, size_t xlimit, size_t ylimit, void** program) {
1085 auto start = (Stage)load_and_inc(program);
1091 start(&params,program, 0,0,0,0);
1096 start(&params,program, 0,0,0,0);
1101 start(0,program,dx,dy, 0,0,0,0, 0,0,0,0);
1105 start(tail,program,dx,dy, 0,0,0,0, 0,0,0,0);
1115 static void ABI name(Params* params, void** program, \
1117 name##_k(Ctx{program},params->dx,params->dy,params->tail, r,g,b,a, \
1119 auto next = (Stage)load_and_inc(program); \
1120 next(params,program, r,g,b,a); \
1128 static void ABI name(size_t tail, void** program, size_t dx, size_t dy, \
1130 name##_k(Ctx{program},dx,dy,tail, r,g,b,a, dr,dg,db,da); \
1131 auto next = (Stage)load_and_inc(program); \
1132 next(tail,program,dx,dy, r,g,b,a, dr,dg,db,da); \
2936 using Stage = void(ABI*)(Params*, void** program, U16 r, U16 g, U16 b, U16 a);
2938 // We pass program as the second argument so that load_and_inc() will find it in %rsi on x86-64.
2939 using Stage = void (ABI*)(size_t tail, void** program, size_t dx, size_t dy,
2945 const size_t xlimit, const size_t ylimit, void** program) {
2946 auto start = (Stage)load_and_inc(program);
2951 start(&params,program, 0,0,0,0);
2955 start(&params,program, 0,0,0,0);
2960 start( 0,program,dx,dy, 0,0,0,0, 0,0,0,0);
2963 start(tail,program,dx,dy, 0,0,0,0, 0,0,0,0);
2988 static void ABI name(Params* params, void** program, U16 r, U16 g, U16 b, U16 a) { \
2991 name##_k(Ctx{program}, params->dx,params->dy,params->tail, x,y); \
2994 auto next = (Stage)load_and_inc(program); \
2995 next(params,program, r,g,b,a); \
3003 static void ABI name(Params* params, void** program, U16 r, U16 g, U16 b, U16 a) { \
3006 name##_k(Ctx{program}, params->dx,params->dy,params->tail, x,y, r,g,b,a, \
3008 auto next = (Stage)load_and_inc(program); \
3009 next(params,program, r,g,b,a); \
3019 static void ABI name(Params* params, void** program, U16 r, U16 g, U16 b, U16 a) { \
3020 name##_k(Ctx{program}, params->dx,params->dy,params->tail, r,g,b,a, \
3022 auto next = (Stage)load_and_inc(program); \
3023 next(params,program, r,g,b,a); \
3031 static void ABI name(size_t tail, void** program, size_t dx, size_t dy, \
3036 name##_k(Ctx{program}, dx,dy,tail, x,y); \
3039 auto next = (Stage)load_and_inc(program); \
3040 next(tail,program,dx,dy, r,g,b,a, dr,dg,db,da); \
3048 static void ABI name(size_t tail, void** program, size_t dx, size_t dy, \
3053 name##_k(Ctx{program}, dx,dy,tail, x,y, r,g,b,a, dr,dg,db,da); \
3054 auto next = (Stage)load_and_inc(program); \
3055 next(tail,program,dx,dy, r,g,b,a, dr,dg,db,da); \
3065 static void ABI name(size_t tail, void** program, size_t dx, size_t dy, \
3068 name##_k(Ctx{program}, dx,dy,tail, r,g,b,a, dr,dg,db,da); \
3069 auto next = (Stage)load_and_inc(program); \
3070 next(tail,program,dx,dy, r,g,b,a, dr,dg,db,da); \