MCPcopy Create free account
hub / github.com/pydata/numexpr / VEC_ARG3

Function VEC_ARG3

code_generators/interp_generator.py:266–294  ·  view source on GitHub ↗
(expr: str)

Source from the content-addressed store, hash-verified

264
265
266def VEC_ARG3(expr: str) -> str:
267 return '''
268{
269 NE_REGISTER store_in = params->program[pc].ret;
270 NE_REGISTER arg1 = params->program[pc].arg1;
271 NE_REGISTER arg2 = params->program[pc].arg2;
272 NE_REGISTER arg3 = params->program[pc].arg3;
273 BOUNDS_CHECK(store_in);
274 BOUNDS_CHECK(arg1);
275 BOUNDS_CHECK(arg2);
276 BOUNDS_CHECK(arg3);
277
278 $DTYPE0 *dest = ($DTYPE0 *)params->registers[store_in].mem;
279 $DTYPE1 *x1 = ($DTYPE1 *)params->registers[arg1].mem;
280 npy_intp sb1 = (params->registers[arg1].kind == KIND_TEMP) ? sizeof($DTYPE1) : params->registers[arg1].stride;
281 $DTYPE2 *x2 = ($DTYPE2 *)params->registers[arg2].mem;
282 npy_intp sb2 = (params->registers[arg2].kind == KIND_TEMP) ? sizeof($DTYPE2) : params->registers[arg2].stride;
283 $DTYPE3 *x3 = ($DTYPE3 *)params->registers[arg3].mem;
284 npy_intp sb3 = (params->registers[arg3].kind == KIND_TEMP) ? sizeof($DTYPE3) : params->registers[arg3].stride;
285
286 if( sb1 == sizeof($DTYPE1) && sb2 == sizeof($DTYPE2) && sb3 == sizeof($DTYPE3) ) { // Aligned
287 VEC_LOOP(expr)
288 return 0;
289 }
290 // Strided
291 STRIDED_LOOP(expr)
292 return 0;
293}
294'''.replace('STRIDED_LOOP(expr)', STRIDED_LOOP(expr)).replace('VEC_LOOP(expr)', VEC_LOOP(expr))
295
296# This is a function lookup helper dict
297VEC_ARGN = {0: VEC_ARG0, 1: VEC_ARG1, 2: VEC_ARG2, 3: VEC_ARG3}

Callers

nothing calls this directly

Calls 2

STRIDED_LOOPFunction · 0.85
VEC_LOOPFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…