@@ -1246,7 +1246,37 @@ PyMODINIT_FUNC PyInit_lpython_module_)" + fn_name + R"((void) {
1246
1246
bool is_value_dict = ASR::is_a<ASR::Dict_t>(*m_value_type);
1247
1247
bool alloc_return_var = false ;
1248
1248
std::string indent (indentation_level*indentation_spaces, ' ' );
1249
- if (ASR::is_a<ASR::Var_t>(*x.m_target )) {
1249
+ if (ASRUtils::is_simd_array (x.m_target )) {
1250
+ this ->visit_expr (*x.m_target );
1251
+ target = src;
1252
+ if (ASR::is_a<ASR::Var_t>(*x.m_value ) ||
1253
+ ASR::is_a<ASR::ArraySection_t>(*x.m_value )) {
1254
+ std::string arr_element_type = CUtils::get_c_type_from_ttype_t (
1255
+ ASRUtils::expr_type (x.m_value ));
1256
+ std::string size = std::to_string (ASRUtils::get_fixed_size_of_array (
1257
+ ASRUtils::expr_type (x.m_target )));
1258
+ std::string value;
1259
+ if (ASR::is_a<ASR::ArraySection_t>(*x.m_value )) {
1260
+ ASR::ArraySection_t *arr = ASR::down_cast<ASR::ArraySection_t>(x.m_value );
1261
+ this ->visit_expr (*arr->m_v );
1262
+ value = src;
1263
+ if (!ASR::is_a<ASR::ArrayBound_t>(*arr->m_args ->m_left )) {
1264
+ this ->visit_expr (*arr->m_args ->m_left );
1265
+ int n_dims = ASRUtils::extract_n_dims_from_ttype (arr->m_type ) - 1 ;
1266
+ value += " ->data + (" + src + " - " + value +" ->dims["
1267
+ + std::to_string (n_dims) +" ].lower_bound)" ;
1268
+ } else {
1269
+ value += " ->data" ;
1270
+ }
1271
+ } else if (ASR::is_a<ASR::Var_t>(*x.m_value )) {
1272
+ this ->visit_expr (*x.m_value );
1273
+ value = src + " ->data" ;
1274
+ }
1275
+ src = indent + " memcpy(&" + target +" , " + value +" , sizeof("
1276
+ + arr_element_type + " ) * " + size +" );\n " ;
1277
+ return ;
1278
+ }
1279
+ } else if (ASR::is_a<ASR::Var_t>(*x.m_target )) {
1250
1280
ASR::Var_t* x_m_target = ASR::down_cast<ASR::Var_t>(x.m_target );
1251
1281
visit_Var (*x_m_target);
1252
1282
target = src;
0 commit comments