1 /* { dg-do compile } */
2 /* { dg-require-effective-target lp64 } */
3 /* { dg-options "-O2 -ftree-tail-merge" } */
7 Lisp_Int0
= 0, Lisp_Int1
= 4, Lisp_Symbol
= 2, Lisp_Misc
= 3, Lisp_String
=
8 1, Lisp_Vectorlike
= 5, Lisp_Cons
= 6, Lisp_Float
= 7,
10 typedef long Lisp_Object
;
13 PVEC_NORMAL_VECTOR
= 0, PVEC_PROCESS
= 0x200, PVEC_FRAME
=
14 0x400, PVEC_COMPILED
= 0x800, PVEC_WINDOW
=
15 0x1000, PVEC_WINDOW_CONFIGURATION
= 0x2000, PVEC_SUBR
=
16 0x4000, PVEC_CHAR_TABLE
= 0x8000, PVEC_BOOL_VECTOR
=
17 0x10000, PVEC_BUFFER
= 0x20000, PVEC_HASH_TABLE
= 0x40000, PVEC_TERMINAL
=
18 0x80000, PVEC_SUB_CHAR_TABLE
= 0x100000, PVEC_FONT
=
19 0x200000, PVEC_OTHER
= 0x400000, PVEC_TYPE_MASK
= 0x7ffe00
25 struct Lisp_Char_Table
30 struct Lisp_Sub_Char_Table
32 Lisp_Object contents
[1];
34 extern Lisp_Object Qnil
, Qt
, Qquote
, Qlambda
, Qsubr
, Qunbound
;
43 struct buffer_text
*text
;
44 struct region_cache
*width_run_cache
;
45 Lisp_Object tab_width
;
46 Lisp_Object ctl_arrow
;
48 extern struct buffer
*current_buffer
;
49 extern Lisp_Object Vchar_width_table
;
52 long text_lines
, text_cols
;
58 extern Lisp_Object Vtruncate_partial_width_windows
;
59 extern struct Lisp_Char_Table
*window_display_table (struct window
*);
60 long find_before_next_newline (long, long, long);
61 long disp_char_vector (struct Lisp_Char_Table
*, int);
62 long char_table_ref (Lisp_Object
, int);
64 compute_motion (from
, fromvpos
, fromhpos
, did_motion
, to
, tovpos
, tohpos
,
65 width
, hscroll
, tab_offset
, win
)
66 int did_motion
, width
, hscroll
, tab_offset
;
67 long from
, fromvpos
, fromhpos
, to
, tovpos
, tohpos
;
70 register long hpos
= fromhpos
;
74 register struct Lisp_Char_Table
*dp
= window_display_table (win
);
75 long wide_column_end_hpos
= 0;
76 long continuation_glyph_width
;
81 int total_width
= width
+ continuation_glyph_width
;
82 if (!((Vtruncate_partial_width_windows
) == (Qnil
))
86 *) ((long) (((win
)->frame
) & ~((((long) 1) << 3) -
91 pos
= find_before_next_newline (pos
, to
, 1);
93 if (wide_column_end_hpos
> width
)
104 (current_buffer
->text
->gpt_byte
) ? (current_buffer
->text
->
106 ((pos_byte
)) + (current_buffer
->text
->beg
) - ((1))));
107 if (current_buffer
->width_run_cache
)
109 if (((((enum Lisp_Type
) (((unsigned long) ((charvec
))) &
110 ((((long) 1) << 3) - 1))) ==
115 *) ((long) ((charvec
) & ~((((long) 1) << 3) - 1))))->
116 size
& ((((unsigned long) 1 << (64 - 1)) >> 1)))))
119 int bytes
, width
, wide_column
;
122 if ((!((*ptr
) & 0x80) ? 1 : !((*ptr
) & 0x20) ? 2 :
123 !((*ptr
) & 0x10) ? 3 : !((*ptr
) & 0x08) ? 4 : 5) !=
131 Lisp_Type
) (((unsigned
132 long) (((((unsigned) (c
) <
140 long) (((dp
)->ascii
))) & ((((long) 1) << 3) - 1))) == Lisp_Vectorlike
) && (((((void) 0, (struct Lisp_Vector
*) ((long) (((dp
)->ascii
) & ~((((long) 1) << 3) - 1))))->size
& (((((unsigned long) 1 << (64 - 1)) >> 1)) | (PVEC_SUB_CHAR_TABLE
)))) == (((((unsigned long) 1 << (64 - 1)) >> 1)) | (PVEC_SUB_CHAR_TABLE
)))) ? ((void) 0, (struct Lisp_Sub_Char_Table
*) ((long) (((dp
)->ascii
) & ~((((long) 1) << 3) - 1))))->contents
[c
] : (dp
)->ascii
)) : disp_char_vector ((dp
), (c
)))))) & ((((long) 1) << 3) - 1))) == Lisp_Vectorlike
) && !(((void) 0, (struct Lisp_Vector
*) ((long) (((((unsigned) (c
) < 0x80) ? ((((dp
)->ascii
) == (Qnil
)) ? (dp
)->defalt
: (((((enum Lisp_Type
) (((unsigned long) (((dp
)->ascii
))) & ((((long) 1) << 3) - 1))) == Lisp_Vectorlike
) && (((((void) 0, (struct Lisp_Vector
*) ((long) (((dp
)->ascii
) & ~((((long) 1) << 3) - 1))))->size
& (((((unsigned long) 1 << (64 - 1)) >> 1)) | (PVEC_SUB_CHAR_TABLE
)))) == (((((unsigned long) 1 << (64 - 1)) >> 1)) | (PVEC_SUB_CHAR_TABLE
)))) ? ((void) 0, (struct Lisp_Sub_Char_Table
*) ((long) (((dp
)->ascii
) & ~((((long) 1) << 3) - 1))))->contents
[c
] : (dp
)->ascii
)) : disp_char_vector ((dp
), (c
)))) & ~((((long) 1) << 3) - 1))))->size
& ((((unsigned long) 1 << (64 - 1)) >> 1)))))
144 *) ((long) (((((unsigned) (c
) <
145 0x80) ? ((((dp
)->ascii
) ==
149 Lisp_Type
) (((unsigned long) (((dp
)->ascii
))) & ((((long) 1) << 3) - 1))) == Lisp_Vectorlike
) && (((((void) 0, (struct Lisp_Vector
*) ((long) (((dp
)->ascii
) & ~((((long) 1) << 3) - 1))))->size
& (((((unsigned long) 1 << (64 - 1)) >> 1)) | (PVEC_SUB_CHAR_TABLE
)))) == (((((unsigned long) 1 << (64 - 1)) >> 1)) | (PVEC_SUB_CHAR_TABLE
)))) ? ((void) 0, (struct Lisp_Sub_Char_Table
*) ((long) (((dp
)->ascii
) & ~((((long) 1) << 3) - 1))))->contents
[c
] : (dp
)->ascii
)) : disp_char_vector ((dp
), (c
)))) & ~((((long) 1) << 3) - 1))))->size
;
152 (((unsigned) (c
) < 0x80) ? (c
<
162 : (((current_buffer
->ctl_arrow
) == (Qnil
)) ? 4 : 2))) : (c
< 0x7f ? 1 : ((((current_buffer
->ctl_arrow
) == (Qnil
)) ? 4 : 2)))) : (((long) ((((unsigned) (c
) < 0x80) ? (
167 ): char_table_ref ((Vchar_width_table
), (c
))))) >> (3 - 1)));
174 wide_column_end_hpos
= hpos
+ wide_column
;