comparison libinterp/parse-tree/jit-typeinfo.cc @ 27957:c20b7290c778

merge stable to default.
author John W. Eaton <jwe@octave.org>
date Fri, 17 Jan 2020 13:27:27 -0600
parents bd51beb6205e 2310164737b3
children a4268efb7334
comparison
equal deleted inserted replaced
27955:179ece36a2eb 27957:c20b7290c778
261 for (octave_idx_type i = 0; i < idx_count; ++i) 261 for (octave_idx_type i = 0; i < idx_count; ++i)
262 result(i) = idx_vector (indices[i]); 262 result(i) = idx_vector (indices[i]);
263 } 263 }
264 264
265 extern "C" double 265 extern "C" double
266 octave_jit_paren_scalar (jit_matrix *mat, double *indicies, 266 octave_jit_paren_scalar (jit_matrix *mat, double *indices,
267 octave_idx_type idx_count) 267 octave_idx_type idx_count)
268 { 268 {
269 // FIXME: Replace this with a more optimal version 269 // FIXME: Replace this with a more optimal version
270 Array<idx_vector> idx; 270 Array<idx_vector> idx;
271 make_indices (indicies, idx_count, idx); 271 make_indices (indices, idx_count, idx);
272 272
273 Array<double> ret = mat->m_array->index (idx); 273 Array<double> ret = mat->m_array->index (idx);
274 274
275 return ret.xelem (0); 275 return ret.xelem (0);
276 } 276 }
1393 m_scalar, m_scalar); 1393 m_scalar, m_scalar);
1394 m_binary_ops[octave_value::op_pow].add_overload (fn); 1394 m_binary_ops[octave_value::op_pow].add_overload (fn);
1395 m_binary_ops[octave_value::op_el_pow].add_overload (fn); 1395 m_binary_ops[octave_value::op_el_pow].add_overload (fn);
1396 1396
1397 // now for unary scalar operations 1397 // now for unary scalar operations
1398 // FIXME: Impelment not 1398 // FIXME: Implement not
1399 fn = create_internal ("octave_jit_++", m_scalar, m_scalar); 1399 fn = create_internal ("octave_jit_++", m_scalar, m_scalar);
1400 body = fn.new_block (); 1400 body = fn.new_block ();
1401 m_builder.SetInsertPoint (body); 1401 m_builder.SetInsertPoint (body);
1402 { 1402 {
1403 llvm::Value *one = llvm::ConstantFP::get (m_scalar_t, 1); 1403 llvm::Value *one = llvm::ConstantFP::get (m_scalar_t, 1);
1596 llvm::Value *ret = m_builder.CreateICmpULT (idx, nelem); 1596 llvm::Value *ret = m_builder.CreateICmpULT (idx, nelem);
1597 fn.do_return (m_builder, ret); 1597 fn.do_return (m_builder, ret);
1598 } 1598 }
1599 m_for_check_fn.add_overload (fn); 1599 m_for_check_fn.add_overload (fn);
1600 1600
1601 // index variabe for for loop 1601 // index variable for for loop
1602 fn = create_internal ("octave_jit_for_range_idx", m_scalar, m_range, 1602 fn = create_internal ("octave_jit_for_range_idx", m_scalar, m_range,
1603 m_index); 1603 m_index);
1604 body = fn.new_block (); 1604 body = fn.new_block ();
1605 m_builder.SetInsertPoint (body); 1605 m_builder.SetInsertPoint (body);
1606 { 1606 {
1648 // logically_true boolean 1648 // logically_true boolean
1649 fn = create_identity (m_boolean); 1649 fn = create_identity (m_boolean);
1650 m_logically_true_fn.add_overload (fn); 1650 m_logically_true_fn.add_overload (fn);
1651 1651
1652 // make_range 1652 // make_range
1653 // FIXME: May be benificial to implement all in LLVM 1653 // FIXME: May be beneficial to implement all in LLVM
1654 jit_function compute_nelem 1654 jit_function compute_nelem
1655 = create_external (JIT_FN (octave_jit_compute_nelem), 1655 = create_external (JIT_FN (octave_jit_compute_nelem),
1656 m_index, m_scalar, m_scalar, m_scalar); 1656 m_index, m_scalar, m_scalar, m_scalar);
1657 fn = create_internal ("octave_jit_make_range", m_range, m_scalar, m_scalar, 1657 fn = create_internal ("octave_jit_make_range", m_range, m_scalar, m_scalar,
1658 m_scalar); 1658 m_scalar);