Mercurial > octave
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); |