compare_strings.py (5420:dc0041a51920) compare_strings.py (5661:443e6f925027)
1# Copyright (c) 2007-2008 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# Redistribution and use of this software in source and binary forms,
5# with or without modification, are permitted provided that the
6# following conditions are met:
7#
8# The software must be used only for Non-Commercial Use which means any

--- 62 unchanged lines hidden (view full) ---

71
72#
73# Versions which have the rep prefix. These could benefit from some loop
74# unrolling.
75#
76
77def macroop CMPS_E_M_M {
78 and t0, rcx, rcx, flags=(EZF,), dataSize=asz
1# Copyright (c) 2007-2008 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# Redistribution and use of this software in source and binary forms,
5# with or without modification, are permitted provided that the
6# following conditions are met:
7#
8# The software must be used only for Non-Commercial Use which means any

--- 62 unchanged lines hidden (view full) ---

71
72#
73# Versions which have the rep prefix. These could benefit from some loop
74# unrolling.
75#
76
77def macroop CMPS_E_M_M {
78 and t0, rcx, rcx, flags=(EZF,), dataSize=asz
79 bri t0, label("end"), flags=(CEZF,)
79 br label("end"), flags=(CEZF,)
80
81 # Find the constant we need to either add or subtract from rdi
82 ruflag t0, 10
83 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz
84 subi t4, t0, dsz, dataSize=asz
85 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz
86
87topOfLoop:
88 ld t1, seg, [1, t0, rsi]
89 ld t2, es, [1, t0, rdi]
90 sub t0, t1, t2, flags=(OF, SF, ZF, AF, PF, CF)
91
92 subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
93 add rdi, rdi, t3, dataSize=asz
94 add rsi, rsi, t3, dataSize=asz
80
81 # Find the constant we need to either add or subtract from rdi
82 ruflag t0, 10
83 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz
84 subi t4, t0, dsz, dataSize=asz
85 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz
86
87topOfLoop:
88 ld t1, seg, [1, t0, rsi]
89 ld t2, es, [1, t0, rdi]
90 sub t0, t1, t2, flags=(OF, SF, ZF, AF, PF, CF)
91
92 subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
93 add rdi, rdi, t3, dataSize=asz
94 add rsi, rsi, t3, dataSize=asz
95 bri t0, label("topOfLoop"), flags=(CSTRZnEZF,)
95 br label("topOfLoop"), flags=(CSTRZnEZF,)
96end:
97 fault "NoFault"
98};
99
100def macroop CMPS_N_M_M {
101 and t0, rcx, rcx, flags=(EZF,), dataSize=asz
96end:
97 fault "NoFault"
98};
99
100def macroop CMPS_N_M_M {
101 and t0, rcx, rcx, flags=(EZF,), dataSize=asz
102 bri t0, label("end"), flags=(CEZF,)
102 br label("end"), flags=(CEZF,)
103
104 # Find the constant we need to either add or subtract from rdi
105 ruflag t0, 10
106 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz
107 subi t4, t0, dsz, dataSize=asz
108 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz
109
110topOfLoop:
111 ld t1, seg, [1, t0, rsi]
112 ld t2, es, [1, t0, rdi]
113 sub t0, t1, t2, flags=(OF, SF, ZF, AF, PF, CF)
114
115 subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
116 add rdi, rdi, t3, dataSize=asz
117 add rsi, rsi, t3, dataSize=asz
103
104 # Find the constant we need to either add or subtract from rdi
105 ruflag t0, 10
106 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz
107 subi t4, t0, dsz, dataSize=asz
108 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz
109
110topOfLoop:
111 ld t1, seg, [1, t0, rsi]
112 ld t2, es, [1, t0, rdi]
113 sub t0, t1, t2, flags=(OF, SF, ZF, AF, PF, CF)
114
115 subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
116 add rdi, rdi, t3, dataSize=asz
117 add rsi, rsi, t3, dataSize=asz
118 bri t0, label("topOfLoop"), flags=(CSTRnZnEZF,)
118 br label("topOfLoop"), flags=(CSTRnZnEZF,)
119end:
120 fault "NoFault"
121};
122'''
119end:
120 fault "NoFault"
121};
122'''