static bool trans_ebreak(DisasContext *ctx, arg_ebreak *a)
{
    generate_exception(ctx, RISCV_EXCP_BREAKPOINT);
    tcg_gen_exit_tb(NULL, 0); /* no chaining */
    ctx->base.is_jmp = DISAS_NORETURN;
    return true;
}
static bool trans_ecall(DisasContext *ctx, arg_ecall *a)
{
    /* always generates U-level ECALL, fixed in do_interrupt handler */
    generate_exception(ctx, RISCV_EXCP_U_ECALL);
    tcg_gen_exit_tb(NULL, 0); /* no chaining */
    ctx->base.is_jmp = DISAS_NORETURN;
    return true;
}
void	ffl_dump_report::report( ffl_text_file * file, ffl_dump_param_t * param )
{
	if( file != NULL && param != NULL )
	{
		FILETIME	current_time;
		::GetSystemTimeAsFileTime( &current_time );

		ffl_tchar_t	time_buffer[100] = { 0, };
		ffl_formating_time( time_buffer, FFL_COUNTOF( time_buffer ), &current_time );

		ffl_dump_print( file, FFL_T( "\r\n\r\n==================   logged at %s    ==========================\r\n\r\n" ), time_buffer );

		generate_exception( file, param );

		ffl_dump_print( file, FFL_T( "\r\n===== [end of file] =====\r\n" ) );
	}

	return;
}