From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#include "spvm_native.h"
#include <string.h>
static const char* FILE_NAME = "SPVM/MyOpenMP.c";
int32_t SPVM__MyOpenMP__sum_vec_int(SPVM_ENV* env, SPVM_VALUE* stack) {
void* obj_nums1 = stack[0].oval;
if (obj_nums1 == NULL) {
return env->die(env, stack, "$nums1 must be defined.", __func__, FILE_NAME, __LINE__);
}
int32_t* nums1 = env->get_elems_int(env, stack, obj_nums1);
void* obj_nums2 = stack[1].oval;
if(obj_nums2 == NULL) {
return env->die(env, stack, "$nums2 must be defined.", __func__, FILE_NAME, __LINE__);
}
int32_t* nums2 = env->get_elems_int(env, stack, obj_nums2);
int32_t length = env->length(env, stack, obj_nums1);
void* obj_nums3 = env->new_int_array(env, stack, length);
int32_t* nums3 = env->get_elems_int(env, stack, obj_nums3);
int32_t i;
#pragma omp parallel for
for (i = 0; i < length; i++) {
nums3[i] = nums1[i] + nums2[i];
}
stack[0].oval = obj_nums3;
return 0;
}