GCC Middle and Back End API Reference
|
Public Member Functions | |
store_by_pieces_d (rtx to, by_pieces_constfn cfn, void *cfn_data, unsigned HOST_WIDE_INT len, unsigned int align, by_pieces_operation op) | |
rtx | finish_retmode (memop_ret) |
void | run () |
Protected Member Functions | |
virtual void | finish_mode (machine_mode) |
Protected Attributes | |
pieces_addr | m_to |
pieces_addr | m_from |
const unsigned HOST_WIDE_INT | m_len |
HOST_WIDE_INT | m_offset |
unsigned int | m_align |
unsigned int | m_max_size |
bool | m_reverse |
bool | m_push |
bool | m_overlap_op_by_pieces |
by_pieces_operation | m_op |
Private Member Functions | |
void | generate (rtx, rtx, machine_mode) final override |
bool | prepare_mode (machine_mode, unsigned int) final override |
fixed_size_mode | get_usable_mode (fixed_size_mode, unsigned int) |
fixed_size_mode | smallest_fixed_size_mode_for_size (unsigned int) |
Private Attributes | |
insn_gen_fn | m_gen_fun |
Derived class from op_by_pieces_d, providing support for block move operations.
|
inline |
|
inlineprotectedvirtualinherited |
Reimplemented in compare_by_pieces_d.
Referenced by op_by_pieces_d::run().
Perform the final adjustment at the end of a string to obtain the correct return value for the block operation. Return value is based on RETMODE argument.
References pieces_addr::adjust(), gcc_assert, op_by_pieces_d::m_offset, op_by_pieces_d::m_reverse, op_by_pieces_d::m_to, pieces_addr::maybe_postinc(), and RETURN_END_MINUS_ONE.
A callback used when iterating for a store_by_pieces_operation. OP0 and OP1 are the values that have been loaded and should be compared in MODE. If OP0 is NULL, this means we should generate a push; otherwise EXTRA_DATA holds a pointer to a pointer to the insn gen function that should be used to generate the mode.
Implements op_by_pieces_d.
References emit_insn(), and m_gen_fun.
|
privateinherited |
This function returns the largest usable integer mode for LEN bytes whose size is no bigger than size of MODE.
References GET_MODE_SIZE(), op_by_pieces_d::m_align, op_by_pieces_d::m_op, op_by_pieces_d::prepare_mode(), and widest_fixed_size_mode_for_size().
Referenced by op_by_pieces_d::run().
|
finaloverrideprivatevirtual |
Return true if MODE can be used for a set of stores, given an alignment ALIGN. Prepare whatever data is necessary for later calls to generate.
Implements op_by_pieces_d.
References GET_MODE_ALIGNMENT, m_gen_fun, and optab_handler().
|
inherited |
This function contains the main loop used for expanding a block operation. First move what we can in the largest integer mode, then go to successively smaller modes. For every access, call GENFUN with the two operands and the EXTRA_DATA.
References pieces_addr::adjust(), by_pieces_prev::data, op_by_pieces_d::finish_mode(), generate(), GET_MODE_SIZE(), op_by_pieces_d::get_usable_mode(), op_by_pieces_d::m_from, op_by_pieces_d::m_len, op_by_pieces_d::m_max_size, op_by_pieces_d::m_offset, op_by_pieces_d::m_op, op_by_pieces_d::m_overlap_op_by_pieces, op_by_pieces_d::m_push, op_by_pieces_d::m_reverse, op_by_pieces_d::m_to, pieces_addr::maybe_postinc(), pieces_addr::maybe_predec(), by_pieces_prev::mode, NULL_RTX, op_by_pieces_d::smallest_fixed_size_mode_for_size(), and widest_fixed_size_mode_for_size().
|
privateinherited |
Return the smallest integer or QI vector mode that is not narrower than SIZE bytes.
References by_pieces_mode_supported_p(), can_use_qi_vectors(), candidate(), FOR_EACH_MODE_IN_CLASS, GET_MODE_INNER, GET_MODE_SIZE(), is_a(), op_by_pieces_d::m_len, op_by_pieces_d::m_op, opt_mode< T >::require(), and smallest_int_mode_for_size().
Referenced by op_by_pieces_d::run().
|
protectedinherited |
Referenced by op_by_pieces_d::get_usable_mode(), and op_by_pieces_d::op_by_pieces_d().
|
protectedinherited |
Referenced by op_by_pieces_d::op_by_pieces_d(), and op_by_pieces_d::run().
|
private |
Referenced by generate(), and prepare_mode().
|
protectedinherited |
Referenced by op_by_pieces_d::run(), and op_by_pieces_d::smallest_fixed_size_mode_for_size().
|
protectedinherited |
Referenced by op_by_pieces_d::op_by_pieces_d(), and op_by_pieces_d::run().
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
Referenced by op_by_pieces_d::op_by_pieces_d(), and op_by_pieces_d::run().
|
protectedinherited |
Referenced by op_by_pieces_d::run().
|
protectedinherited |
|
protectedinherited |