425 Label& branch_target,
426 bool len64,
427 bool has_sign);
428
429 //
430 // Support for frame handling
431 //
432 // Specify the register that should be stored as the return pc in the
433 // current frame (default is R14).
434 inline void save_return_pc(Register pc = Z_R14);
435 inline void restore_return_pc();
436
437 // Get current PC.
438 address get_PC(Register result);
439
440 // Get current PC + offset. Offset given in bytes, must be even!
441 address get_PC(Register result, int64_t offset);
442
443 // Resize current frame either relatively wrt to current SP or absolute.
444 void resize_frame_sub(Register offset, Register fp, bool load_fp=true);
445 void resize_frame_absolute(Register addr, Register fp, bool load_fp=true);
446 void resize_frame(RegisterOrConstant offset, Register fp, bool load_fp=true);
447
448 // Push a frame of size bytes, if copy_sp is false, old_sp must already
449 // contain a copy of Z_SP.
450 void push_frame(Register bytes, Register old_sp, bool copy_sp = true, bool bytes_with_inverted_sign = false);
451
452 // Push a frame of size `bytes'. no abi space provided.
453 // Don't rely on register locking, instead pass a scratch register
454 // (Z_R0 by default).
455 // CAUTION! passing registers >= Z_R2 may produce bad results on
456 // old CPUs!
457 unsigned int push_frame(unsigned int bytes, Register scratch = Z_R0);
458
459 // Push a frame of size `bytes' with abi160 on top.
460 unsigned int push_frame_abi160(unsigned int bytes);
461
462 // Pop current C frame.
463 void pop_frame();
464
465 //
|
425 Label& branch_target,
426 bool len64,
427 bool has_sign);
428
429 //
430 // Support for frame handling
431 //
432 // Specify the register that should be stored as the return pc in the
433 // current frame (default is R14).
434 inline void save_return_pc(Register pc = Z_R14);
435 inline void restore_return_pc();
436
437 // Get current PC.
438 address get_PC(Register result);
439
440 // Get current PC + offset. Offset given in bytes, must be even!
441 address get_PC(Register result, int64_t offset);
442
443 // Resize current frame either relatively wrt to current SP or absolute.
444 void resize_frame_sub(Register offset, Register fp, bool load_fp=true);
445 void resize_frame_abs_with_offset(Register newSP, Register fp, int offset, bool load_fp);
446 void resize_frame_absolute(Register newSP, Register fp, bool load_fp);
447 void resize_frame(RegisterOrConstant offset, Register fp, bool load_fp=true);
448
449 // Push a frame of size bytes, if copy_sp is false, old_sp must already
450 // contain a copy of Z_SP.
451 void push_frame(Register bytes, Register old_sp, bool copy_sp = true, bool bytes_with_inverted_sign = false);
452
453 // Push a frame of size `bytes'. no abi space provided.
454 // Don't rely on register locking, instead pass a scratch register
455 // (Z_R0 by default).
456 // CAUTION! passing registers >= Z_R2 may produce bad results on
457 // old CPUs!
458 unsigned int push_frame(unsigned int bytes, Register scratch = Z_R0);
459
460 // Push a frame of size `bytes' with abi160 on top.
461 unsigned int push_frame_abi160(unsigned int bytes);
462
463 // Pop current C frame.
464 void pop_frame();
465
466 //
|